DP(三)——簡單的完全背包
完全背包問題的描述:
有N種物品和一個容量為V的背包,每種物品都有無限件可用。
第i種物品的費(fèi)用是c[i],價值是w[i]。
求解將哪些物品裝入背包可使這些物品的費(fèi)用總和不超過背包容量,且價值總和最大。
例子如下:
30 4
100 6
250 12
120 10
35 2
解釋一下上面的數(shù)據(jù):
30是背包的容量
100 是第一件物品的價值,6是第一件物品的重量。
往下類推……
View Code
#include "iostream"
#include "string.h"
using namespace std;
#define size 10005
int f[size];
int main()
{
int t, l, i, v, s, t1;
cin>>t>>l;
memset(f, 0, sizeof(f));
for(i=0; i<l; i++)
{
cin>>s>>t1;
for(v=t1; v<=t; v++) //這里一定是v=t1,要不然,v-t1就會出現(xiàn)小于0的情況,很明顯就會出錯了。
f[v] = max(f[v], f[v-t1]+s);
}
cout<<f[t]<<endl;
}
調(diào)試的過程如下:



posted on 2011-11-16 09:58 More study needed. 閱讀(238) 評論(0) 收藏 舉報

浙公網(wǎng)安備 33010602011771號