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;
}
posted @ 2026-02-13 17:51  2025ing  阅读(0)  评论(0)    收藏  举报