用记忆化搜索的方法做01背包题
来源:互联网 发布:c语言输出unicode字符 编辑:程序博客网 时间:2024/05/07 08:30
今天看题的时候,看到了早就做过的01背包题,想想当时刚开始学的时候,用的是记忆化搜索,这种方法对时间复杂度上的要求比较高,相信很多大牛们都不用了吧,但我还是写了一下,算是一种加强记忆吧,以后有想看的也可以在这里找到:
一道hdu上的01背包裸题:http://acm.hdu.edu.cn/showproblem.php?pid=2602
Bone Collector
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 41109 Accepted Submission(s): 17110
Problem Description
Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave …
The bone collector had a big bag with a volume of V ,and along his trip of collecting there are a lot of bones , obviously , different bone has different value and different volume, now given the each bone’s value along his trip , can you calculate out the maximum of the total value the bone collector can get ?
The bone collector had a big bag with a volume of V ,and along his trip of collecting there are a lot of bones , obviously , different bone has different value and different volume, now given the each bone’s value along his trip , can you calculate out the maximum of the total value the bone collector can get ?
Input
The first line contain a integer T , the number of cases.
Followed by T cases , each case three lines , the first line contain two integer N , V, (N <= 1000 , V <= 1000 )representing the number of bones and the volume of his bag. And the second line contain N integers representing the value of each bone. The third line contain N integers representing the volume of each bone.
Followed by T cases , each case three lines , the first line contain two integer N , V, (N <= 1000 , V <= 1000 )representing the number of bones and the volume of his bag. And the second line contain N integers representing the value of each bone. The third line contain N integers representing the volume of each bone.
Output
One integer per line representing the maximum of the total value (this number will be less than 231).
Sample Input
15 101 2 3 4 55 4 3 2 1
Sample Output
14
下面是AC代码:更高效的01背包代码网上挺多的,以下就不给出了。
#include <iostream>#include <cstring>#include <cstdio>#define MAXN 1000+10using namespace std;int N,V;long long dp[1010][1010];//dp[i][j]取第i件物品时,背包容量为j时价值的最大值struct node{ int v; int w;}a[1010];long long dfs(int i,int j){ long long ans; if(i<=0){ if(j>=a[0].w) ans=a[0].v; else ans=0; } else if(dp[i][j]!=-1) ans=dp[i][j]; else{ if(j>=a[i].w) ans=max(dfs(i-1,j),dfs(i-1,j-a[i].w)+a[i].v); else ans=dfs(i-1,j); } dp[i][j]=ans; return dp[i][j];}int main(){ int T; scanf("%d",&T); while(T--) { memset(dp,-1,sizeof(dp)); scanf("%d%d",&N,&V); for(int i=0;i<N;i++) scanf("%d",&a[i].v); for(int i=0;i<N;i++) scanf("%d",&a[i].w); printf("%I64d\n",dfs(N-1,V)); } return 0;}
0 0
- 用记忆化搜索的方法做01背包题
- 01背包 记忆化搜索
- 01背包 记忆化搜索
- 【记忆化搜索】01背包
- 01背包(记忆化搜索)
- 简单背包 记忆化搜索
- 【OJ】DP 01背包 记忆化搜索 O(nW)
- 动态规划---01背包与记忆化搜索
- hdu 2546 饭卡【01背包变形||记忆化搜索】
- 动态规划---01背包与记忆化搜索
- uva242, 完全背包||记忆化搜索,(类似广工校赛的一道题)
- POJ - 1837 Balance 记忆化搜索,背包
- UVA10817-----Headmaster's Headache-----状态压缩的背包(记忆化搜索实现)
- 编程算法 - 背包问题(记忆化搜索) 代码(C)
- 练习题 No.5 背包问题(动态规划-记忆化搜索)
- HDU-4571-spfa,记忆化搜索,背包,DP
- 0-1背包问题(dfs记忆化搜索写法)
- HDOJ1078 记忆化搜索入门题 有详细的记忆化搜索模板程序
- Timer定时任务
- DirectShow Samples
- Python 命令
- Festo控制器--上传文件
- WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案
- 用记忆化搜索的方法做01背包题
- js时间对比的问题
- Zookeeper Api(java)入门与应用
- 黑马程序员——Java基础(八)之异常处理、递归、IO流
- iOS中 FMDB第三方SQLite数据库 UI_20
- ES-MongoDB学习2_mongodb-river-elasticsearch源码解析
- Android开发过程中内存泄露检测及工具
- Top 10 Java Serialization Interview Questions and Answers
- SQL LEFT JOIN 关键字 高级教程