1 条题解

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

    信息

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