75pts求找错误
查看原帖
75pts求找错误
708997
jlwz楼主2024/9/28 21:27
#include<iostream>
#include<cstring>
using namespace std;

int n,m,k;
int up[10005];
int down[10005];
int l[10005];//下方管道
int h[10005];//上方管道
int dp[10005][1005];//第i列,第j行
int sum[10005],pp[10005];

int main()
{
    freopen("P1941_3.in","r",stdin);
    //freopen("P1941_3.ans","w",stdout);
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
        cin>>up[i]>>down[i];
    for(int i=1;i<=k;i++)
    {
        int p;
        cin>>p;
        cin>>l[p]>>h[p];
        pp[p]=1;
        /*for(int j=0;j<=l[p];j++)
            dp[i][j]=0x3f3f3f3f;
        for(int j=m;j>=h[p];j--)
            dp[i][j]=0x3f3f3f3f;*/
    }
    for(int i=1;i<=n;i++)
    {
        if(h[i]==0)
            h[i]=m+1;
        sum[i]=sum[i-1]+pp[i];
        /*if(l[i]==0)
            l[i]=-1;*/
    }
    memset(dp,0x3f,sizeof(dp));
    for(int i=0;i<=m;i++)
        dp[0][i]=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=l[i]+1;j<=h[i]-1;j++)
        {
            int h=j;int f=1;
            while(h-up[i]>=0)
            {
                dp[i][j]=min(dp[i][j],dp[i-1][h-up[i]]+f);
                h=h-up[i];f++;
                //cout<<i-1<<' '<<dp[i-1][h-up[i]]+f<<endl;
            }
            if(j==m)
            {
                for(int k=j-up[i];k<=m;k++)
                    dp[i][j]=min(dp[i][j],dp[i-1][k]+1);
            }
            if(j+down[i]<=m)
                dp[i][j]=min(dp[i][j],dp[i-1][j+down[i]]);
            //cout<<dp[i][j]<<' ';
        }
        //cout<<endl;
    }
    int ans=0x3f3f3f3f;
    for(int i=0;i<=m;i++)
        ans=min(ans,dp[n][i]);
    if(ans!=0x3f3f3f3f)
        cout<<1<<endl<<ans<<endl;
    else
    {
        cout<<0<<endl;
        for(int i=n;i>=1;i--)
        {
            for(int j=l[i]+1;j<=h[i]-1;j++)
            {
                if(dp[i][j]!=0x3f3f3f3f)
                {
                    cout<<sum[i]<<endl;
                    return 0;
                }
            }
        }
    }
    return 0;
}

2024/9/28 21:27
加载中...