50分求助,为啥不对,,,
查看原帖
50分求助,为啥不对,,,
524191
Man_CCNU楼主2023/2/27 20:39
#include<iostream>
#include<cstring>

using namespace std;

const int N = 5e2 + 10;

int f[N][N][N], n, m;

struct node {
    int cost;
    int fri;
    int be;
}flow[N];

int main()      
{
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++) {
        scanf("%d%d%d", &flow[i].cost, &flow[i].fri, &flow[i].be);
    }
    memset(f, -0x3f3f3f3f, sizeof f);
    f[1][flow[1].cost][flow[1].fri] = flow[1].be;
    for (int j = flow[1].cost; j <N; j++) {
        for (int k = flow[1].fri; k >= 0; k--) {
            f[1][j][k] = flow[1].be;
        }
    }
    for (int i = 2; i <= n; i++) {
        for (int j = 0; j < N; j++) {
            for (int k = N - 2; k >= 0; k--) {
                f[i][j][k] = max(f[i][j][k + 1], f[i - 1][j][k]);
                if (j >= flow[i].cost) {
                    if (k >= flow[i].fri) {
                        f[i][j][k] = max(f[i][j][k], f[i - 1][j - flow[i].cost][k-flow[i].fri] + flow[i].be);
                    }
                    else {
                        f[i][j][k] = max(f[i][j][k], f[i - 1][j - flow[i].cost][0] + flow[i].be);
                        f[i][j][k] = max(f[i][j][k], flow[i].be);
                    }
                }
            }
        }
    }
    for (int i = 1; i <= m; i++) {
        int c, fri;
        scanf("%d%d", &c, &fri);
        if (f[n][c][fri] < 0) {
            f[n][c][fri] = 0;
        }
        printf("%d\n", f[n][c][fri]);
    }

    return 0;
}
2023/2/27 20:39
加载中...