您的位置:首页 > 其它

POJ3624——01背包

2012-08-01 22:12 190 查看
题目大意:

一个镯子,对它施以魔法,增加属性值。而其本身承重能力有限。

每种魔法能最镯子增加 一定属性,但是也会增加镯子的重量。

给出几种魔法 增重、增加属性的信息 和 镯子的承重限制。

求出最佳方法使得镯子获得最佳属性。

每种魔法只能使用一次。

浅析:

典型的01背包问题。

第一次见到01背包的题,才知道有这么个算法。看到题的时候还不知道怎么入手,遂参考了一下别人的代码。

代码如下:(仅供参考)

#include<iostream>
using namespace std;
int f[12881];
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int Num,TotalWeight,i,k,j,weight[12881],value[12881];
cin>>Num>>TotalWeight;
f[0] = 0;
for(i=0; i<Num; i++)
cin>>weight[i]>>value[i];
for(i=0; i<Num; i++)
for(k=TotalWeight; k>=weight[i]; k--)
{
f[k]=max(f[k],(f[k-weight[i]]+value[i]));
}
cout<<f[TotalWeight]<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: