1 条题解

  • 1
    @ 2025-1-21 22:26:05
    #include<iostream>
    using namespace std;
    const int N = 1100;
    int f[N][N],v[N],w[N],s[N];
    int n,m;
    int cnt;
    int main()
    {
        cin >> n >> m;
        while(n --)
        {
            int a,b,c;
            cin >> a >> b >> c;
            int k = 1;
            while(c >= k)
            {
                c -= k;
                cnt ++;
                v[cnt] = a * k;
                w[cnt] = b * k;
                k <<= 1;
            }
            if(c)
            {
                cnt ++;
                v[cnt] = a * c;
                w[cnt] = b * c;
            }
        }
        n = cnt;
        
        for(int i = 1;i <= n; ++ i)
        {
            for(int j = 1; j <= m; ++ j)
            {
                if(j >= v[i]) f[i][j] = max(f[i - 1][j], f[i - 1][j - v[i]] + w[i]);
                else f[i][j]=f[i-1][j];
            }
        }
        
        cout << f[n][m] << endl;
        return 0;
    }
    

    信息

    ID
    5549
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者