70分求条
查看原帖
70分求条
571779
liankunxiang楼主2025/8/4 11:25
#include<bits/stdc++.h>
#define MAX_N 10010
#define MAX_M 1010
#define MAX_K 10010
using namespace std;

int n,m,k;
int x[MAX_N],y[MAX_N];
long long dp[MAX_N][MAX_M];
struct node {
    int p,l,h;
};
node pipe_w[MAX_K];
int main() {
    //freopen("P1941_4.in","r",stdin);
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++){
        cin>>x[i]>>y[i];
    }
    for(int i=1;i<=k;i++) {
        cin>>pipe_w[i].p>>pipe_w[i].l>>pipe_w[i].h;
    }
    sort(pipe_w+1,pipe_w+1+k,[](node x,node y){return x.p<y.p;});
    int cnt=1;
    long long sum=LLONG_MAX-100;
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) {
            dp[i][j]=LLONG_MAX-100;
        } 
    }
    for(int i=1;i<=m;i++) {
        dp[0][i]=0;
    }
    for(int i=1;i<=n;i++) {
        dp[i][0]=LLONG_MAX-100;
    }
    for(int i=1;i<=n;i++) {
        sum=LLONG_MAX-100;
        for(int j=1;j<=m;j++) {
            dp[i][j]=LLONG_MAX-100;
        }
        for(int j=x[i]+1;j<m;j++) {
            dp[i][j]=min(dp[i][j],min(dp[i-1][j-x[i]],dp[i][j-1])+1);
        }
        for(int j=m-x[i];j<=m;j++) {
            dp[i][m]=min(dp[i][m],min(dp[i-1][j],dp[i][j])+1);
        }
        for(int j=1;j<=m-y[i];j++) {
            dp[i][j]=min(dp[i][j],dp[i-1][j+y[i]]);
        }
        if(pipe_w[cnt].p==i) {
            for(int j=1;j<=pipe_w[cnt].l;j++) {
                dp[i][j]=LLONG_MAX-100;
            }
            for(int j=pipe_w[cnt].h;j<=m;j++) {
                dp[i][j]=LLONG_MAX-100;
            }
        }
        for(int j=1;j<=m;j++) {
            sum=min(sum,dp[i][j]);
        }
        if(sum==LLONG_MAX-100) {
            cout<<0<<endl<<cnt-1<<endl;
            return 0;
        }
        if(pipe_w[cnt].p==i) {
            cnt++;
        }
    }
    cout<<1<<endl<<sum<<endl;
    //fclose(stdin);
    return 0;
}
2025/8/4 11:25
加载中...