1 #include <iostream> 2 using namespace std; 3 #define SIZE 5 4 #define Limit 150 5 int a[SIZE]={35,105,100,45,75}; 6 int b[SIZE]={115,75,55,35,105}; 7 int a1[SIZE]; 8 int b1[SIZE]; 9 int c[SIZE]={1,2,3,4,5}; 10 int c1[SIZE]; 11 int minnum=Limit+1; 12 void minqi1(int chong[SIZE],int fang[SIZE]); 13 void minqi(int chong[SIZE],int fang[SIZE]); 14 void quanpai(int n); 15 int main() 16 { 17 quanpai(0); 18 if(minnum==Limit+1) 19 { 20 cout <<"无最佳"<<endl; 21 } 22 else 23 { 24 cout <<minnum<<endl; 25 } 26 return 0; 27 } 28 bool safe(int num,int n) 29 { 30 bool ret=true; 31 for(int i=0;i<n;i++) 32 { 33 if(c1[i]==num) 34 ret=false; 35 } 36 return ret; 37 } 38 39 void quanpai(int n) 40 { 41 if(n==SIZE) 42 { 43 minqi1(a1,b1); 44 return; 45 } 46 for(int i=0;i<SIZE;i++) 47 { 48 a1[n]=a[i]; 49 b1[n]=b[i]; 50 c1[n]=c[i]; 51 if(safe(c1[n],n)) 52 { 53 quanpai(n+1); 54 } 55 } 56 } 57 void minqi(int chong[SIZE],int fang[SIZE]) 58 { 59 int i=0; 60 int j=0; 61 while(i>=0&&i<=Limit) 62 { 63 int qi=i; 64 65 for(j=0;j<SIZE;j++) 66 { 67 if(qi+chong[j]>Limit) 68 break; 69 if(qi+chong[j]-fang[j]<0) 70 break; 71 qi+=chong[j]-fang[j]; 72 } 73 if(j==SIZE) 74 break; 75 i++; 76 } 77 if(j==SIZE&&i<=Limit&&i<minnum) 78 minnum=i; 79 } 80 81 82 void minqi1(int chong[SIZE],int fang[SIZE]) 83 { 84 int cha[SIZE]={0}; 85 int k=0; 86 int j=0; 87 int mins=0; 88 int max=0; 89 90 for(int i=0;i<SIZE;i++) 91 { 92 j=k+chong[i]; 93 k=k+chong[i]-fang[i]; 94 cha[i]=k; 95 if(cha[i]<mins) 96 { 97 mins=cha[i]; 98 } 99 if(j>max) 100 { 101 max=j; 102 } 103 } 104 if(mins<0) 105 { 106 mins=-mins; 107 } 108 if(mins<minnum&&mins+max<=Limit) 109 minnum=mins; 110 } 111