求大佬查错
查看原帖
求大佬查错
159959
虫洞吞噬者楼主2021/10/28 20:51

RT,具体思路和题解里的都一样,估计是某个细节挂了,但我一直没有找出来QAQ,求大佬帮忙查错

code:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
int n,m,k,ans,flag;
int vis[100100],low[100100],top[100100],up[100100],down[100100];
int f[10103][1103];
struct node{
	int id,p;
}tump[100100];
bool cmp(node a,node b)
{
	return a.p<b.p;
}
int main()
{
	scanf("%d%d%d",&n,&m,&k);
	for(int i=0;i<n;++i)scanf("%d%d",&up[i],&down[i]);
	for(int i=1;i<=k;++i)
	{
		int a;
		scanf("%d%d%d",&a,&low[i],&top[i]);
		tump[i].id=i;
		tump[i].p=a;
	}
	sort(tump+1,tump+1+k,cmp);
	memset(f,0x3f,sizeof(f));
	for(int i=1;i<=k;++i)vis[tump[i].p]=tump[i].id;
	for(int i=1;i<=m;++i)f[0][i]=0;
	if(tump[1].p==0&&tump[1].id)
	{
		int cur=tump[1].id;
		for(int i=0;i<=low[cur];++i)f[0][i]=inf;
		for(int i=m;i>=top[cur];--i)f[0][i]=inf;
	}
	for(int i=1;i<=n;++i)
	{
		if(vis[i])
		{
			int cur=vis[i];
			for(int j=top[cur]-1;j>low[cur];--j)f[i][j]=min(f[i][j],f[i-1][j+down[i-1]]);
			for(int j=low[cur]+1;j<top[cur];++j)
			{
				if(j>up[i-1])f[i][j]=min(f[i][j],f[i-1][j-up[i-1]]+1);
				if(j>up[i])f[i][j]=min(f[i][j],f[i][j-up[i]]+1);
				if(j==m)
				{
					for(register int l=m-up[i-1];l<=m;++l)f[i][j]=min(f[i][j],f[i-1][l]+1);
					for(register int l=m-up[i];l<=m;++l)f[i][j]=min(f[i][j],f[i][l]+1);
				}
			}
		}
		else
		{
			for(int j=m-down[i-1];j>=1;--j)f[i][j]=min(f[i][j],f[i-1][j+down[i-1]]);
			for(int j=1;j<=m;++j)
			{
				if(j>up[i-1])f[i][j]=min(f[i][j],f[i-1][j-up[i-1]]+1);
				if(j>up[i])f[i][j]=min(f[i][j],f[i][j-up[i]]+1);
				if(j==m)
				{
					for(register int l=m-up[i-1];l<=m;++l)f[i][j]=min(f[i][j],f[i-1][l]+1);
					for(register int l=m-up[i];l<=m;++l)f[i][j]=min(f[i][j],f[i][l]+1);					
				}
			}
		}
	}
	int ans=inf;
	for(int i=1;i<=m;++i)ans=min(ans,f[n][i]);
	if(ans==inf)
	{
		int sum=0;
		printf("0\n");
		for(int i=n-1;i>=0;--i)
		{
			if(vis[i])++sum;
			for(int j=1;j<=m;++j)
				if(f[i][j]!=inf)
				{
					printf("%d",k-sum);
					return 0;
				}
		}
		printf("0");
	}
	else printf("1\n%d",ans);
	return 0;
}
2021/10/28 20:51
加载中...