完全背包——POJ 2063

来源:互联网 发布:sql安装重启计算机 编辑:程序博客网 时间:2024/06/15 23:57

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;}