您的位置:首页 > 其它

完全背包——POJ 2063

2012-04-08 16:10 351 查看
POJ 2063 Investment

/*
POJ 2063
典型的多重背包问题
每种债券的价格是重量,每年的利息是价值
这道题目多了个增长的年数,所以每一年得到利息+本金后,就要重新进行一次债券的购买选择
*/

#include <iostream>
using namespace std;

int values[15]; //债券价格
int interest[15]; //年利息
int dp[999999];

int main()
{
int nCase,growthYears,baseMoney,boundKinds;
int i,j,v,now_money;

cin>>nCase;
while(nCase--)
{
cin>>baseMoney>>growthYears;
cin>>boundKinds;
for(i=1;i<=boundKinds;i++)
{
cin>>values[i]>>interest[i];
values[i] /= 1000; //是1000的倍数,除以1000,使得开的数组可以小很多
}
while(growthYears--)
{
now_money = baseMoney/1000;

for(i=0;i<999999;i++)
dp[i]=0;

for(j=1;j<=boundKinds;j++)
for(v=values[j];v<=now_money;v++)
if(dp[v-values[j]]+interest[j] > dp[v])
dp[v] = dp[v-values[j]] + interest[j];

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