求卡常
查看原帖
求卡常
363415
251Sec楼主2022/9/24 12:25
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, q, a, b;
int co[505], fr[505], be[505];
ll f[505][505];
int main() {
    scanf("%d%d", &n, &q);
    for (int i = 1; i <= n; i++) {
        scanf("%d%d%d", &co[i], &fr[i], &be[i]);
    }
    memset(f, 0xc0, sizeof(f));
    f[0][0] = 0;
    for (int i = 1; i <= n; i++) {
        for (int j = 500; j >= 0; j--) {
            for (int k = 500; k >= co[i]; k--) {
                f[j][k] = max(f[j][k], f[max(0, j - fr[i])][k - co[i]] + be[i]);
            }
            for (int k = 1; k <= 500; k++) {
                f[j][k] = max(f[j][k], f[j][k - 1]);
            }
        }
    }
    while (q--) {
        scanf("%d%d", &a, &b);
        printf("%lld\n", f[b][a] > 0 ? f[b][a] : 0);
    }
    return 0;
}

每个测试点大约差 0.05s。

2022/9/24 12:25
加载中...