35分深夜求助(悬赏关注
查看原帖
35分深夜求助(悬赏关注
569235
w9095楼主2022/12/14 23:10

样例过了,不知道哪的问题,求调。

#include <bits/stdc++.h>
#define INF 99999999
using namespace std;
int n,m,k,d=INF,ans1=INF,ans2=0,a[10010],b[10010],p[10010],l[10010],h[10010],f[10010][1010]; 
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}

int main()
{
	n=read();m=read();k=read();
	for(int i=0;i<n;i++)a[i]=read(),b[i]=read();
	for(int i=0;i<=n;i++)l[i]=0,h[i]=m+1;
	for(int i=0;i<k;i++)
	   {
	   p[i]=read();
	   l[p[i]]=read(),h[p[i]]=read();
       }
	f[0][0]=INF;
	for(int i=1;i<=n;i++)
	    for(int j=0;j<=m;j++)
	        f[i][j]=INF;
	for(int i=1;i<=n;i++)
	    {
	    for(int j=1;j<=m;j++)
	        if(j>=a[i-1])
	            {
		        if(j<m)
		           {
				   f[i][j]=min(f[i][j],f[i-1][j-a[i-1]]+1);
				   f[i][j]=min(f[i][j],f[i][j-a[i-1]]+1);
			       }
		        if(j==m)
		           for(int k=m-a[i-1];k<=a[i-1];k++)
		               {
				       f[i][j]=min(f[i][j],f[i-1][k]+1);
					   f[i][j]=min(f[i][j],f[i][k]+1);
				       }
		        }
	    for(int j=1;j<=m;j++)
	        if(j+b[i-1]<=m)f[i][j]=min(f[i][j],f[i-1][j+b[i-1]]);
		for(int j=0;j<=l[i];j++)
		    f[i][j]=INF;
		for(int j=m;j>=h[i];j--)
		    f[i][j]=INF;
	    }
	for(int i=0;i<m;i++)
	    ans1=min(ans1,f[n][i]);
	if(ans1!=INF)printf("1\n%d",ans1);
	else
	   {
	   for(int i=0;i<=n;i++)
	       {
	       bool flag=1;
	       for(int j=0;j<=m;j++)
	           if(f[i][j]!=INF)flag=0;
	       if(flag)
	          {
		      d=i;
		      break;
		      }
	       }
	   for(int i=0;i<k;i++)
       	    if(p[i]<d)ans2++;
       printf("0\n%d",ans2);
	   }
	return 0;
}

提交记录

附赠#3数据

2022/12/14 23:10
加载中...