HDU2602 Bone Collector
2012-08-10 12:20
190 查看
题意大致是:
有个人在爱好是收集骨头,然后背包容量有限,每块骨头有特定的重量和价值。求在有限制的背包容量下装下的骨头的最大价值。
注意,输入是先价值,后重量,别搞混了。
解题思路是:
设定一个Dp数组,初始全为0,用来存放”现阶段“最大的价值。
有个人在爱好是收集骨头,然后背包容量有限,每块骨头有特定的重量和价值。求在有限制的背包容量下装下的骨头的最大价值。
注意,输入是先价值,后重量,别搞混了。
解题思路是:
设定一个Dp数组,初始全为0,用来存放”现阶段“最大的价值。
#include<iostream> using namespace std; #define MAXN 1100 int DpValue[MAXN]; int value[MAXN]; int volume[MAXN]; int main() { int n; while (cin>>n) { for (int o=0; o<n; o++) { int bagValume; int bone; cin>>bone>>bagValume; //此处Dp数组的初始化必须练DpValue[0]一并初始化,因为顾忌到包容量为0的情况; memset(DpValue, 0, sizeof(DpValue)); for (int i=1; i<=bone; i++ ) { cin>>value[i]; } for (int i=1; i<=bone; i++ ) { cin>>volume[i]; } for (int i=1; i<=bone; i++ ) { for (int j=bagValume; j>=volume[i]; j--) { //更新Dp数组,找到容量为j的时候现阶段最大容量。 //DpValue[j - volume[i]] + value[i] 表示此时加上第I个骨头后,价值是多少,用来与现阶段容量j的价值做比较; DpValue[j] = DpValue[j] > (DpValue[j - volume[i]] + value[i]) ? DpValue[j] : DpValue[j - volume[i]] + value[i]; } } cout<<DpValue[bagValume]<<endl; } } return 0; }
相关文章推荐
- HDU 2602 Bone Collector - from lanshui_Yang
- hdu 2602 Bone Collector 01背包
- HDU_2602 Bone Collector(DP)
- HDU 2602 Bone Collector (01背包)
- HDU 2602 Bone Collector(01背包)
- HDU 2602(Bone Collector)基础0-1背包问题
- HDU 2602|Bone Collector|裸01背包问题
- HDU 2602 Bone Collector【01背包】
- HDU - 2602 Bone Collector (01背包)
- hdu 2602 Bone Collector (01背包)
- hdu 2602 Bone Collector 背包入门题
- HDU 2602 Bone Collector
- Bone Collector(hdu 2602)
- 01背包问题之HDU——2602 Bone Collector
- HDU 2602 Bone Collector
- HDU 2602 - Bone Collector
- hdu 2602 Bone Collector 01背包
- HDU 2602 Bone Collector
- HDU2602_Bone Collector(背包/01背包)
- HDU 2602 Bone Collector(01背包问题)