我的动归为啥不对?求助!,求求了
查看原帖
我的动归为啥不对?求助!,求求了
524191
Man_CCNU楼主2022/12/13 19:59

//f[i][j]:前i个血量为j时的最大高度

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

const int N = 1e2 + 10;

int f[N][3000+10], n, m,res;
struct node {
    int t;
    int v;
    int h;
}a[N];

bool cmp(node x, node y)
{
    return x.t < y.t;
}
int main()
{
    cin >> n >> m;
    memset(f, -1, sizeof f);
    for (int i = 1; i <= m; i++) {
        cin >> a[i].t >> a[i].v >> a[i].h;
    }
    sort(a + 1, a + m + 1, cmp);
    f[0][10] = 0;
    for (int i = 1; i <= m; i++) {
        for (int j = 0; j <= 3000; j++) {
            int tem = a[i].t - a[i - 1].t;
            if (j+tem >=a[i].v&& j + tem - a[i].v<=3000&& f[i - 1][j + tem - a[i].v]>=0) {
                f[i][j] = max(f[i][j], f[i - 1][j + tem - a[i].v]);
            }
            if (j+tem>=0&&j+tem<=3000&& f[i - 1][j + tem]>=0) {
                f[i][j] = max(f[i][j], f[i - 1][j + tem] + a[i].h);
            }
        }
    }
    for (int i = 1; i <= m; i++) {
        for (int j = 0; j <= 3000; j++) {
            if (f[i][j] >= 0) {
                res = max(res, a[i].t);
            }
            if (f[i][j] >= n) {
                cout << a[i].t << endl;

                return 0;
            }
        }
    }
    cout << res << endl;

    return 0;
}
2022/12/13 19:59
加载中...