70分,莫名wa

回复帖子

@fry2017 2019-04-27 15:51 回复
#include<bits/stdc++.h>
#define MAXN 10010
#define MAXY 2010
#define INF 0x3f3f3f3f
using namespace std;
int n,m,k;
int X[MAXN],Y[MAXN];
int P,L,H;
int Up[MAXN],Down[MAXN],f[MAXN][MAXY];
bool Flag[MAXN];
int main()
{
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<=n;i++)Up[i]=m,Down[i]=1;
    for(int i=1;i<=n;i++)scanf("%d%d",&X[i],&Y[i]);
    for(int i=1;i<=k;i++)
    {
        scanf("%d%d%d",&P,&L,&H);
        Flag[P]=true;
        Up[P]=H-1;
        Down[P]=L+1;
    }
    memset(f,INF,sizeof(f));
    for(int i=1;i<=m;i++)f[0][i]=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=X[i]+1;j<=X[i]+m;j++)
            f[i][j]=min(f[i-1][j-X[i]]+1,f[i][j-X[i]]+1);
        for(int j=1;j<=m-Y[i];j++)
            f[i][j]=min(f[i][j],f[i-1][j+Y[i]]);
        for(int j=m+1;j<=m+X[i];j++)
            f[i][m]=min(f[i][m],f[i][j]);
        for(int j=1;j<Down[i];j++)
            f[i][j]=INF;
        for(int j=Up[i]+1;j<=m;j++)
            f[i][j]=INF;
    }
    int ans=INF;
    for(int i=1;i<=m;i++)
        ans=min(ans,f[n][i]);
    if(ans!=INF){printf("1\n%d",ans);return 0;}
    int cnt=n,cnt2;
    for(;cnt>=1;cnt--)
    {
        for(cnt2=1;cnt2<=m;cnt2++)
            if(f[cnt][cnt2]!=INF)break;
        if(cnt2<=m)break;
    }
    ans=0;
    for(int i=1;i<=cnt;i++)
        if(Flag[i])ans++;
    printf("0\n%d",ans);
    return 0;
}

评测记录

反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。