HDU 2602 Bone Collector
2015-05-09 08:14
211 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602
用二维数组做的。。。。
该题是一道背包题,并且是一个0,1背包,这种背包特点是:每种物品仅有一件,可以选择放或不放。
用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:
f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}
这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”,价值为f[i-1][v];如果放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为v-c[i]的背包中”,此时能获得的最大价值就是f[i-1][v-c[i]]再加上通过放入第i件物品获得的价值w[i]。
#include <iostream>
using namespace std;
int dp[1050][1050];
int value[1050], volume[1050];
int main()
{
int t, n, v, i, j;
cin>>t;
while(t--)
{
memset(dp,0,sizeof(dp));
cin>>n>>v;
for(i = 1; i <= n; i++)
cin>>value[i];
for(j = 1; j <= n; j++)
cin>>volume[j];
for(i = 1; i <= n; i++)
for(j = 0; j <= v; j++)
{
if(j>=volume[i] && dp[i-1][j-volume[i]]+value[i]>dp[i-1][j])
{
dp[i][j] = dp[i-1][j-volume[i]]+value[i];
}
else
{
dp[i][j] = dp[i-1][j];
}
}
cout<<dp
[v]<<endl;
}
return 0;
}
用二维数组做的。。。。
该题是一道背包题,并且是一个0,1背包,这种背包特点是:每种物品仅有一件,可以选择放或不放。
用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:
f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}
这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”,价值为f[i-1][v];如果放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为v-c[i]的背包中”,此时能获得的最大价值就是f[i-1][v-c[i]]再加上通过放入第i件物品获得的价值w[i]。
#include <iostream>
using namespace std;
int dp[1050][1050];
int value[1050], volume[1050];
int main()
{
int t, n, v, i, j;
cin>>t;
while(t--)
{
memset(dp,0,sizeof(dp));
cin>>n>>v;
for(i = 1; i <= n; i++)
cin>>value[i];
for(j = 1; j <= n; j++)
cin>>volume[j];
for(i = 1; i <= n; i++)
for(j = 0; j <= v; j++)
{
if(j>=volume[i] && dp[i-1][j-volume[i]]+value[i]>dp[i-1][j])
{
dp[i][j] = dp[i-1][j-volume[i]]+value[i];
}
else
{
dp[i][j] = dp[i-1][j];
}
}
cout<<dp
[v]<<endl;
}
return 0;
}
相关文章推荐
- hdu 2602 Bone Collector(01背包问题)
- hdu 2602 Bone Collector
- HDU:2602 Bone Collector(经典01背包)
- HDU - 2602 Bone Collector
- hdu 2602-Bone Collector
- HDU 2602 Bone Collector (经典0-1背包)
- HDU2602 Bone Collector 01背包入门
- HDU 2602 Bone Collector (01背包问题 基础)
- HDU 2602 Bone Collector 背包
- hdu 2602 Bone Collector 【01背包模板】
- DP Problem P:Bone Collector(HDU 2602
- HDU 2602 Bone Collector (01背包)
- HDU - 2602 Bone Collector —— 01背包
- HDU 2602 (简单的01背包) Bone Collector
- HDU-2602 Bone Collector
- HDU 2602 Bone Collector(01背包)
- hdu 2602 Bone Collector 0-1背包问题
- HDU 2602 Bone Collector(01背包,DP)
- HDU 2602 Bone Collector
- HDU 2602 Bone Collector