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] ); }
|
近期评论