首页 > 代码库 > 装箱问题(0-1背包)
装箱问题(0-1背包)
有一批共n个集装箱要装上艘载重量为c的轮船,其中集装箱i的重量为wi。找出一种最优装载方案,将轮船尽可能装满,即在装载体积不受限制的情况下,将尽可能重的集装箱装上轮船。
#include <iostream>#define MAX 12882using namespace std;struct node{ int w;}data[MAX];int dp[MAX],n,m;void Init(){ int i; for(i=1;i<=n;i++) scanf("%d",&data[i].w);}int GetMax(int a,int b){ if(a>b) return a; else return b;}void Knapsack(){ int i,j; for(i=0;i<=m;i++) { if(i>=data[n].w) dp[i]=data[n].w; else dp[i]=0; } for(i=n-1;i>=1;i--) for(j=m;j>=1;j--) { if(j>=data[i].w) { dp[j]=GetMax(dp[j],dp[j-data[i].w]+data[i].w); } else break; }}int main(){ while(scanf("%d%d",&n,&m)!=EOF) { Init(); Knapsack(); printf("%d\n",dp[m]); } return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。