HRyk
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Друзья, приветствую вас. Нужна помощь в решении задачки: "n грузов различной массы Mj, j=1..n разместить в минимальном числе контейнеров одинаковой вместимости b" Я тут подумал маленько и написал кое-какой код: #include "stdafx.h" #include <conio.h> #include <math.h> //функция ввода данных-------------------- void ReadData(int & n,int m[],int & B) {int i; printf("Vvedite kolicestvo gruzov: "); scanf("%d", & n); printf("Vvedite vmestimost konteinera: "); scanf("%d", & B); for ( i=1;i<n+1;i++)//0,n { printf("Vvedite massu %d-go gruza: ",i+1); scanf("%d", & m[i]); } } //--------------------------------------- //Ищем наименьшее количество контейнеров int PrepareData(int m[],int &n,int &G,int &B) {int sum=0,i; for (i=0;i<n;i++) sum+=m[i]; if (sum%B==0) G=sum/B; else G=(sum/B)+1; return G; } //--------------------------------------- //Формируем вектор int AddOne( int & n,int & G,int V[] ,int VZS[],int & T) {int xxx=1,i; int k,fl=0,y=0,mas[10]; while(xxx==1) { for(i=n-1;V[i]==(n-1)&&i!=-1;i--) V[i]=0; if(i==-1)break; V[i]++; //---------------------- for (int k=0;k<n;k++) printf("%d",V[k]); printf("\n"); //------------------------- return 1; } return 0; } int V[50],VZS[50]; int _tmain(int argc, _TCHAR* argv[]) {int n, m[50], B, G; ReadData(n,m,B); PrepareData(m,n,G,B); while (AddOne(n,G,V,VZS,B)) { //......... } getch(); return 0; } идеология задачи (насколько я ее понял) состоит в том, чтобы рассмотреть векторы масс: 0,0,0,,,,1 0,0,0,,,,2 ......... n,n,n,,,,n и среди этих векторов перебором найти вектор, требующий минимум контейнеров. НО я НЕ СМОГ разобраться в том, как осуществлять перебор полученных векторов масс!!! Если не трудно, помогите, пожалуйста. |