会员
众包
新闻
博问
闪存
赞助商
HarmonyOS
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
不是我干的
博客园
首页
新随笔
联系
管理
POJ3624 01背包入门题[DP]
01背包第一题。
刚开始开的数组为int mat[N][W],然后内存超了。
然后优化成这样既可。
#include<iostream> #define max(a,b) (a>b?a:b) using namespace std; //const int N=3410; const int W=13888; int mat[2][W]; int n,w; int main() { scanf("%d%d",&n,&w); int wi,di; for(int i=1;i<=n;i++) { scanf("%d%d",&wi,&di); for(int j=1;j<wi;j++) { mat[i%2][j]=mat[(i-1)%2][j]; } for(int j=wi;j<=w;j++) { mat[i%2][j]=max(mat[(i-1)%2][j],mat[(i-1)%2][j-wi]+di); } } printf("%d\n",mat[n%2][w]); return 0; }
然后再优化,优化成1维的如下:
#include<iostream> #define max(a,b) (a>b?a:b) using namespace std; //const int N=3410; const int W=13888; int mat[W]; int n,w; int main() { scanf("%d%d",&n,&w); int wi,di; for(int i=1;i<=n;i++) { scanf("%d%d",&wi,&di); for(int j=w;j>=1;j--) { if(j>=wi) mat[j]=max(mat[j],mat[j-wi]+di); } } printf("%d\n",mat[w]); return 0; }
posted on
2011-10-31 23:16
不是我干的
阅读(
121
) 评论(
0
)
收藏
举报
刷新页面
返回顶部