01背包问题
来源:互联网 发布:安卓php环境搭建 编辑:程序博客网 时间:2024/05/17 08:46
#include<iostream>#include<cstring>#include<algorithm>#define MAX 100using namespace std;int n,w;int value[MAX]={3,2,4,2};int weight[MAX]={2,1,3,2};int dp[MAX][MAX];//朴素方法int ans2(int i,int j){ int res; if(i==n) res=0; else if(weight[i]>j) res=ans2(i+1,j); else res=max(ans2(i+1,j),ans2(i+1,j-weight[i])+value[i]); return res;}//记忆化搜索int ans(int i,int j)//从i开始最多重量为j能选择的最大价值{ int res; if(dp[i][j]>=0) return dp[i][j]; else if(weight[i]>j) res=ans(i+1,j); else res=max(ans(i+1,j),ans(i+1,j-weight[i])+value[i]); return dp[i][j]=res;}//DP记忆化搜索void solve1(){ memset(dp,-1,sizeof(dp)); cout<<ans(0,w)<<endl;}//DP反向递推void solve2()// dp[i][j]表示从i开始选择重量j以内的最大价值{ memset(dp,0,sizeof(dp)); for(int i=n-1;i>=0;i--) { for(int j=0;j<=w;j++) { if(weight[i]>j) dp[i][j]=dp[i+1][j]; else dp[i][j]=max(dp[i+1][j],dp[i+1][j-weight[i]]+value[i]); } } cout<<dp[0][w]<<endl;}//DP正向递推void solve3()//dp[i][j]表示前i个物品中选择不超过重量j的最大价值{ memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++) { for(int j=0;j<=w;j++) { if(weight[i]>j) dp[i+1][j]=dp[i][j]; else dp[i+1][j]=max(dp[i][j],dp[i][j-weight[i]]+value[i]); } } cout<<dp[n][w]<<endl;}//DP状态转移void solve4(){ memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++){ for(int j=0;j<=w;j++){ dp[i+1][j]=max(dp[i+1][j],dp[i][j]); if(j+weight[i]<=w) dp[i+1][j+weight[i]]=max(dp[i+1][j+weight[i]],dp[i][j]+value[i]); } } cout<<dp[n][w]<<endl;}int main(){ while(cin>>n>>w) solve4();}
0 0
- 背包问题---01背包
- DP 背包问题 01背包
- 01背包--苹果,背包问题
- 01背包 完全背包问题
- 背包问题之01背包
- 背包问题之01背包
- 背包问题1:01背包
- 背包问题《1》01背包
- 01背包+完全背包问题
- 背包问题-背包01-苹果
- 背包问题之01背包
- 背包问题(01背包,完全背包,多重背包)
- 背包问题(01背包,完全背包,多重背包)
- 动态规划-----背包问题-----01背包,完全背包,多重背包
- 经典背包问题 01背包+完全背包+多重背包
- 背包(01背包、完全背包、多重背包)问题总结
- 背包问题(01背包,完全背包,多重背包)
- 经典背包问题 01背包+完全背包+多重背包
- HTML基础学习总结
- thread_local_storage.obj : error LNK2001: 无法解析的外部符号 pTlsCallback
- 关于cvCopy函数
- 正则表达式--iOS开发
- 好的架构是进化来的,不是设计来的
- 01背包问题
- 如何延迟执行一个block类似performSelector:withObject:afterDelay:?
- JavaWeb开发之简单布局一个Servlet
- Android Chromium的标题代码运行路径
- CocoaPods安装和使用教程
- 【Codeforces Round 330 (Div 2)C】【博弈 贪心 脑洞】n个数AB轮流选到只剩俩,A希望差小B希望差大问最后差值
- 最长公共子序列LCS
- 查看Linux版本系统信息方法
- Cocos2d-x3.0 新成员Value,Vector,Map详解