1 条题解

  • 0
    @ 2024-11-25 11:42:28

    01背包

    注意的求的内容是恰好装满且求最小价值,所以需要初始化其数据为 inf。

    注意输出的最后有小数点。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int inf = 0x3f3f3f3f, MOD = 1E9 + 7;
    const int N = 505, M=1e5+5;
    int n,m,w[N],v[N],a,b,f[M];
    void solve() {
        cin >> a >> b >> n;
        for (int i = 1; i <= n; i++) cin >> w[i] >> v[i];
        m = b - a;
        memset(f, 0x3f, sizeof f);
        f[0] = 0;
        for (int i = 1; i <= n; i++)
            for (int j = v[i]; j <= m; j++)
                f[j] = min(f[j], f[j - v[i]] + w[i]);
        if (f[m] >= inf) cout << "This is impossible.\n";
        else cout << "The minimum amount of money in the piggy-bank is " << f[m] <<"."<< endl;
    }
    int main(int argc, char* argv[]) {
        int T = 1; cin >> T;
        while (T--) solve();
        return 0;
    }
    
    • 1

    信息

    ID
    945
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    160
    已通过
    84
    上传者