您的位置:首页 > 其它

poj 2063 Investment

2011-06-18 18:01 344 查看
/*
Name: poj 2063 Investment
Author: Unimen
Date: 07/05/11 15:05
Description: 完全背包
*/
/*
解题报告:完全背包
只需注意一点:注意到The value of a bond is always a multiple of $1 000,可以将value/1000,这样可以将循环次数降下来,
不然会超时
*/
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int f[50000];
int main()
{
int nCase;
int i, j, p;
int V, year, bonds;
int v[11], w[11];
while(cin>>nCase)
{
//输入
for(p=0; p<nCase; ++p)
{
cin>>V>>year>>bonds;
for(j=1; j<=bonds; ++j)
{
cin>>v[j]>>w[j];
v[j] /= 1000;
}

//处理背包
while(year--)
{
memset(f, 0, sizeof(f));
int temp = V / 1000;
for(i=1; i<=bonds; ++i)
{
for(j=v[i]; j<=temp; ++j)
{
f[j] = max(f[j], f[j-v[i]]+w[i]);
}
}
V += f[temp];
}
cout<<V<<endl;
}

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: