P1853 投资的最大效益(转化,完全背包基础,空间优化)
注意到每一年后等价于卖掉所有的东西重新决策,也就是重新做一次完全背包。
然而,物体是一样的,完全背包做一次就够了。
我们最多赚到 \(10^6\times(1.1)^{40}\le 4.6\times 10^7\) 的钱,发现数组开不下。
题目说 \(1000|w_i\),什么意思?
就是说,进行决策时,\([a\times10^3,a\times10^3+999]\) 没有区别。
所以,我们开的数组大小达到 \(4.6\times 10^4=46000\) 即可。
#include<stdio.h>
const int N=46000;
int f[47000],V,T,n;
inline int max(int a,int b) {return (a>b)?a:b;}
int main(){
scanf("%d%d%d",&V,&T,&n);
for(int i=1,w,v;i<=n;i++){
scanf("%d%d",&w,&v),w/=1000;
for(int j=w;j<=N;j++) f[j]=max(f[j],f[j-w]+v);
}
while(T--) V+=f[V/1000];
printf("%d\n",V);
return 0;
}

浙公网安备 33010602011771号