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