95pts求助
查看原帖
95pts求助
1181602
Cute_Furina楼主2025/1/21 20:48
#include<bits/stdc++.h>
using namespace std;
struct node {int x, y, z;}a[10010];
int n, m, k, b[10010], c[10010], f[10010][1010], cnt = 1, minn = 1e9, flag, QWQ, QAQ;
bool cmp(node a, node b) {return a.x < b.x;}
signed main(){
    cin >> n >> m >> k;
    for(int i = 0;i < n;i ++) cin >> b[i] >> c[i];
    for(int i = 1;i <= k;i ++) cin >> a[i].x >> a[i].z >> a[i].y;
    sort(a + 1, a + k + 1, cmp);
    for(int i = 0;i <= n;i ++) for (int j = 0;j <= m;j ++) f[i][j] = 1e9;
    for(int i = 1;i <= m;i ++) f[0][i] = 0;
    for(int i = 1;i <= n;i ++) {
        QWQ = 1, QAQ = m;
        if(a[cnt].x == i) QAQ = a[cnt].y - 1, QWQ = a[cnt ++].z + 1;
        for(int j = 1;j <= QAQ;j ++) {
            for(int k = j - b[i - 1];k <= m;k ++) {
                if(k > j - b[i - 1] && j < m) break;
                if(k >= 1) f[i][j] = min(f[i][j], min(f[i - 1][k], f[i][k]) + 1);
            }
        }
        for(int j = QWQ;j <= QAQ;j ++) if (j + c[i - 1] <= m) f[i][j] = min(f[i][j], f[i - 1][j + c[i - 1]]);
        for(int j = 1;j <= QWQ - 1;j ++) f[i][j] = 1e9;
    }
    for(int i = n;i >= 1;i --) {
        for (int j = 1;j <= m;j ++) if (f[i][j] != 1e9) flag = 1, minn = min(minn, f[i][j]);
        if (flag != 0) {
            if (i == n) cout << 1 << endl << minn;
            else for (int j = k;j >= 1;j --) if (i >= a[j].x) {cout << 0 << endl << j;break;}
            return 0;
        }
    }
}
2025/1/21 20:48
加载中...