求助玄关
  • 板块CF864E Fire
  • 楼主_GalaxyMaster_
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/12/30 14:23
  • 上次更新2023/12/30 16:56:58
查看原帖
求助玄关
746213
_GalaxyMaster_楼主2023/12/30 14:23

样例过了

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

const int N = 2010;
int t[N], d[N], p[N];

struct Node {
    int pr = 0, cur = 0;
}f[N];
// f[i]为第i单位时间能救的最大价值

int a[N][N];

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    int n;
    cin >> n;
    int mx = -2e9;
    for (int i = 1; i <= n; ++i) {
        cin >> t[i] >> d[i] >> p[i];
        mx = max(mx, d[i]);
    }
    for (int i = 1; i <= n; ++i) {
        for (int j = d[i] - 1; j >= t[i]; --j) {
            int q = f[j].pr;
            f[j].pr = max(f[j].pr, f[j - t[i]].pr + p[i]);
            f[j].cur = f[j - t[i]].cur + 1;
            if (f[j].pr != q) {
                f[j].cur = f[j - t[i]].cur;
                for (int k = 1; k <= f[j - t[i]].cur; ++k) {
                    a[j][k] = a[j - t[i]][k];
                }
                a[j][++f[j].cur] = i;
            }
        }
    }
    cout << f[mx - 1].pr << "\n" << f[mx - 1].cur << "\n";
    for (int i = 1; i <= 100; ++i) {
        if (a[mx - 1][i] != 0) {
            cout << a[mx - 1][i] << ' ';
        }
        else break;
    }
    return 0;
}
2023/12/30 14:23
加载中...