[二维01背包]VIJOS P1334 NASA的食物计划

来源:互联网 发布:天刀捏脸数据冷艳天香 编辑:程序博客网 时间:2024/04/29 10:20

原题:https://www.vijos.org/p/1334


类型:二维01背包


其实并不是很难..就是二维而已...多套一个循环,数组多开一维即可

但是要注意要取最大值,所以加个ans(至今没想通,反正注意就是了)


时间:2014.4.4


源码(不知为何WA的比较低端的)

#include<cstdio>#include<iostream>using namespace std;int v[51],g[51],k[51],f[51][401][401],vm,gm,n,ans;int max(int x,int y){if(x>y) { return x; }else { return y; }}int main(){scanf("%d %d",&vm,&gm);scanf("%d",&n);for(int i=1;i<=n;i++) { scanf("%d %d %d",&v[i],&g[i],&k[i]); }for(int i=1;i<=n;i++){for(int j=vm;j>=v[i];j--){for(int l=gm;l>=g[i];l--){f[i][j][l]=max(f[i-1][j][l],f[i-1][j-v[i]][l-g[i]]+k[i]);ans=max(ans,f[i][j][l]);}}}printf("%d",ans);system("pause");return 0;}

空间优化过的..不知为何AC了

#include<cstdio>#include<iostream>using namespace std;int v[51],g[51],k[51],f[401][401],vm,gm,n,ans;int max(int x,int y){if(x>y) { return x; }else { return y; }}int main(){scanf("%d %d",&vm,&gm);scanf("%d",&n);for(int i=1;i<=n;i++) { scanf("%d %d %d",&v[i],&g[i],&k[i]); }for(int i=1;i<=n;i++){for(int j=vm;j>=v[i];j--){for(int l=gm;l>=g[i];l--){f[j][l]=max(f[j][l],f[j-v[i]][l-g[i]]+k[i]);ans=max(ans,f[j][l]);}}}printf("%d",ans);system("pause");return 0;}

0 0
原创粉丝点击