参考代码

cookiebus 2024-02-22 15:18:04 9 返回题目

#include <bits/stdc++.h>
using namespace std;
int V, n, T;
int f[70][40000], w[70][40000], c[70][40000], cnt[70];
int _w, _c, t;
int v[70], p[70], q[70];
int main() {
    cin >> V >> n;
    T = 0;
    for (int i = 1; i <= n; ++i) {
        cin >> v[i] >> p[i] >> q[i];
    }
    for (int i = 1; i <= n; ++i)
        if (q[i] == 0) {
            T++;
            cnt[T]++;
            w[T][cnt[T]] = v[i];
            c[T][cnt[T]] = v[i] * p[i];
            int f1 = -1, f2 = -1;
            for (int j = 1; j <= n; ++j)
                if (q[j] == i) {
                    if (f1 == -1)
                        f1 = j;
                    else
                        f2 = j;
                }
            if (f1 != -1) {
                cnt[T]++;
                w[T][cnt[T]] = v[i] + v[f1];
                c[T][cnt[T]] = v[i] * p[i] + v[f1] * p[f1];
            }
            if (f2 != -1) {
                cnt[T]++;
                w[T][cnt[T]] = v[i] + v[f2];
                c[T][cnt[T]] = v[i] * p[i] + v[f2] * p[f2];

                cnt[T]++;
                w[T][cnt[T]] = v[i] + v[f1] + v[f2];
                c[T][cnt[T]] = v[i] * p[i] + v[f1] * p[f1] + v[f2] * p[f2];
            }
        }
    for (int i = 1; i <= T; ++i)
        for (int j = 0; j <= V; ++j) {
            f[i][j] = f[i - 1][j];
            for (int k = 1; k <= cnt[i]; ++k)
                if (j >= w[i][k])
                    f[i][j] = max(f[i][j], f[i - 1][j - w[i][k]] + c[i][k]);
        }
    cout << f[T][V];
    return 0;
}
{{ vote && vote.total.up }}