题意:给定一个初始资金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
",capital);
}
return 0;
}