题意:给定一个初始资金capital,然后给定d种投资方案,每种投资方案中有投资额value[i](是1000的倍数)和利息interest[i],每年的投资就可以拿到全部利息,然后累加起来继续投资利滚利。
问经过year年后最多拥有多少资金?
// 一年年的求最大利润就可以了
// 每一年内都是完全背包
// 这题的关键是value[i]都是1000的倍数 就可以把空间除以1000 了不然时间复杂度就高了好多
#include <iostream> #include <algorithm> #include <queue> #include <math.h> #include <stdio.h> #include <string.h> using namespace std; #define MOD 1000000007 #define maxn 50010 int dp[maxn]; int value[25],interest[25]; int main() { int capital,year; int T; // double s=1.1; // for(int a=1;a<40;a++) s*=1.1; // printf("%lf",s); scanf("%d",&T); while(T--){ scanf("%d %d",&capital,&year); int i,j,k; int tmp,d; scanf("%d",&d); for(i=1;i<=d;i++){ scanf("%d %d",&value[i],&interest[i]); value[i]=value[i]/1000; } for(i=1;i<=year;i++){ tmp=capital/1000; memset(dp,0,sizeof(dp)); for(k=1;k<=d;k++) for(j=value[k];j<=tmp;j++){ dp[j]=max(dp[j],dp[j-value[k]]+interest[k]); } capital+=dp[tmp]; } printf("%d\n",capital); } return 0; }