装载问题

老师的示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "stdio.h"
#include "string.h"

int A[10]={7,2,6,4,5};//假设的每个集装箱的重量
int n=5;
int ans[10];//表示集装箱的状态,0表示不装,1表示装载
int maxw=10;//假设船能承受的最大重量
int goodvalue=-1;
int goodpath[10]={0};

int main()
{
int i=0,j;
for(i=0;i<n;i++)ans[i]=-1;
i=0;
while (i>=0) {
if(i==n)
{
int sum=0;
for(j=0;j<n;j++)if(ans[j]>0)sum+=A[j];
if(sum<=maxw&&sum>goodvalue){
goodvalue=sum;
memcpy(goodpath,ans,4*n);
}
i--;continue;
}
int sum=0;
for(j=0;j<i;j++)if(ans[j]>0)sum+=A[j];
if(sum>maxw){ans[i]=-1;i--;continue;}
for(j=i;j<n;j++)sum+=A[j];
if(sum<goodvalue){ans[i]=-1;i--;continue;}

//处理第i个物品
ans[i]++;
if(ans[i]==2){ans[i]=-1;i--;continue;}

i++;
}
printf("answer=%dn",goodvalue);
for(i=0;i<n;i++)printf("%dn",goodpath[i] );
}