1 条题解

  • 0
    @ 2024-11-26 15:18:57

    01背包

    多组数据,注意初始化。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e3 + 5, M = 1e3 + 5, INF = 0x3f3f3f3f, MOD = 1E9 + 7;
    int n, m, v[N], w[N], f[M];
    
    void solve() {
        cin >> n >> m;
        for (int i = 1; i <= n; i++)
            cin >> w[i];
        for (int i = 1; i <= n; i++)
            cin >> v[i];
    
        // DP
        // 1. 初始化  f[i][j]=0
        memset(f, 0, sizeof f);
        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;
    }
    
    int main() {
        int T;
        cin >> T;
        while (T--)
            solve();
    }
    
    • 1

    信息

    ID
    1128
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    47
    已通过
    36
    上传者