HDU 2602Bone Collector 01背包问题
题意:给出一个t代表有t组数据,然后给出n,n代表有n种石头,v代表旅行者的背包容量,然后给出n种石头的价值和容量大小,求能带走的最大价值
思路:01背包问题,每种石头只有拿与不拿两种状态、(其实我是为理解dp而来的)
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
const int qq=+; //开始数值写小了 只写了100+10
int value[qq];
int weight[qq];
int dp[qq][qq];
void kill(int n,int v)
{
for(int i=;i<=n;++i)
dp[][i]=dp[i][]=;
for(int j,i=;i<=n;++i)
for(j=;j<=v;++j)
if(j<weight[i])
dp[i][j]=dp[i-][j];
else if(dp[i-][j-weight[i]]+value[i]>dp[i-][j])
dp[i][j]=dp[i-][j-weight[i]]+value[i];
else
dp[i][j]=dp[i-][j];
}
int main()
{
int t,n,v;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&v);
for(int i=;i<=n;++i)
scanf("%d",&value[i]);
for(int j=;j<=n;++j)
scanf("%d",&weight[j]);
kill(n,v);
printf("%d\n",dp[n][v]);
}
}
一维数组也能过、只是第二层必须反序来、顺序的话同一件物品可能会被取多次
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const int qq=;
int w[qq],v[qq];
int dp[qq];
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n,m;
memset(dp,,sizeof(dp));
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
scanf("%d",&v[i]);
for(int i=;i<=n;++i)
scanf("%d",&w[i]);
for(int i=;i<=n;++i)
for(int j=m;j>=v[i];--j) //一定记得是逆序、可以自己模拟一遍
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);;
printf("%d\n",dp[m]);
}
return ;
}
贴一份WA的代码
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const int qq=;
int w[qq],v[qq];
int dp[qq][qq];
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n,m;
memset(dp,,sizeof(dp));
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
scanf("%d",&v[i]);
for(int i=;i<=n;++i)
scanf("%d",&w[i]);
for(int i=;i<=n;++i)
for(int j=w[i];j<=m;++j) //我开始还在想为什么这样不对
dp[i][j]=max(dp[i-][j],dp[i-][j-w[i]]+v[i]);
printf("%d\n",dp[n][m]);
}
return ;
}
//先出一组数据吧、
/* 1
5 0
2 4 1 5 1
0 0 1 0 0
这样的话在dp[3]的话是根本不会进入到第二层循环的、
也就是说dp[3][0]的值为0
*/
HDU 2602Bone Collector 01背包问题的更多相关文章
- HDU 2602 Bone Collector (01背包问题)
原题代号:HDU 2602 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 原题描述: Problem Description Many yea ...
- HDU——2602Bone Collector(01背包)
Bone Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 2955(01背包问题)
M - 01背包 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descript ...
- ACM HDU Bone Collector 01背包
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 这是做的第一道01背包的题目.题目的大意是有n个物品,体积为v的背包.不断的放入物品,当然物品有 ...
- HDU 2955(0-1背包问题)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87125#problem/M 题目: Description The aspir ...
- HDU-1864&&HDU-2602(01背包问题)
DP-01背包问题例题 输入处理有点恶心人,不过处理完后就是简单的DP了 从头开始dp[i]表示从0开始到i的最优结果,最后从都边里dp数组,求得最大的报销额. 对于每个i都要从头维护最优结果.(二刷 ...
- HDU 2602 Bone Collector(经典01背包问题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2602 Bone Collector Time Limit: 2000/1000 MS (Java/O ...
- HDU 1864最大报销额 01背包问题
B - 最大报销额 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- HDU 3466 Proud Merchants 带有限制的01背包问题
HDU 3466 Proud Merchants 带有限制的01背包问题 题意 最近,伊萨去了一个古老的国家.在这么长的时间里,它是世界上最富有.最强大的王国.因此,即使他们的国家不再那么富有,这个国 ...
随机推荐
- Django用户登陆以及跳转后台管理页面2
请先写好以下,再来替换文件 Django用户登陆以及跳转后台管理页面1http://www.cnblogs.com/ujq3/p/7891774.html from django.shortcuts ...
- 字符串的trim()用法
trim() 方法会从一个字符串的两端删除空白字符.在这个上下文中的空白字符是所有的空白字符 (space, tab, no-break space 等) 以及所有行终止符字符(如 LF,CR). ...
- 杨柳絮-Info:太原市多部门通力合作科学治理杨柳飞絮效果好
ylbtech-杨柳絮-Info:太原市多部门通力合作科学治理杨柳飞絮效果好 1.返回顶部 1. 太原市多部门通力合作科学治理杨柳飞絮效果好 2016-04-21 07:16 4月10日,随着气温升高 ...
- Codeforces Beta Round #77 (Div. 2 Only) A. Football【字符串/判断是否存在连续7个0或7个1】
A. Football time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- Leetcode5.Longest Palindromic Substring最长回文字串
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...
- 安装babel-preset-stage-0为了不打包所有的组件
今天 看到一段话 是否是我们可以通过这个自定义多种组件,但是只选择我们需要的组件进行打包
- ThInkPHP加密和解密cookie(登录操作)
摘自:http://www.thinkphp.cn/code/1794.html 通过加密cookie是网站安全性更高,登录信息不保存在session中在function.php文件在建立两个函数,加 ...
- 删除指定节点Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- LeafLet 简单使用
Leaflet 使用 最近在Angular项目中,用到了地图,由于种种原因放弃了百度地图api使用,最后选择了leaflet,简单介绍一下. 介绍: Leaflet 是一个为移动设备设计的交互式地图的 ...
- python流程控制和循环
变量的命名:可以由数字字母下换线组成 ,不能以数字开头,可以使用中文但是不推荐使用中文,不推荐前面使用_ __,不能使用系统的关键字,变量名严格区分大小写 逻辑运算优先级 or<and<n ...