#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std; // 卡路里->体积 幸福感->价值
const int M =110000; //决策:不选第i种 第i种至少选1个
long vol[M],val[M],dp[M]; // dp[i][j] 前i种物品装入J的最大价值 = max(dp[i-1][j],dp[i][j-w[i]]+v[i])
int main()
{
int n;
while(cin>>n)
{
for(int i=1;i<=n;i++)
{
cin>>val[i]>>vol[i];
}
int v;
cin>>v;
memset(dp,0,sizeof(dp)); // 前0种价值0
for(int i=1;i<=n;i++) // dp[j] 前i种 装进体积为j的最大价值
{
for(int j=0;j<=v;j++) //正推 保证 dp[j-vol[i]]来自 前i种
{
if(j>=vol[i])
{
dp[j]=max(dp[j],dp[j-vol[i]]+val[i]);
}
}
}
cout<<dp[v]<<endl;
}
return 0;
}
hdu 4508 完全背包入门
最新推荐文章于 2017-09-28 21:34:45 发布