POJ 2063 Investment 完全背包
题意:给你一些钱去投资,现在有n种股票,每种股票都有一个价值和年收益,问你如何投资在d年后的最大收益
并且股票的价值都是1000的倍数,预处理:对每个价值除以1000,减少内存。
完全背包,
每投资一年,你的钱会变多,即背包总容量会变大。
对每一年的资金进行完全背包,然后更新背包总容量,d次循环后得出答案
dp上界:每次投资最多获利本金的10%,所以先写个程序计算出dp上界 1000000.0*pow(1.1,40)/1000=45259
View Code
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int w[11],p[11]; int dp[45555]; int main() { int cas, i, j, t, m, n, x, sum; scanf("%d",&cas); while(cas--) { scanf("%d%d%d",&m,&t,&n); for(i=1;i<=n;i++) scanf("%d%d",&w[i],&p[i]),w[i]/=1000; for(x=1;x<=t;x++) { sum=m/1000; memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) for(j=w[i];j<=sum;j++) dp[j]=max(dp[j],dp[j-w[i]]+p[i]); m+=dp[sum]; } printf("%d\n",m); } return 0; }


浙公网安备 33010602011771号