75分,求助
查看原帖
75分,求助
243063
cyx20080216楼主2020/11/29 07:42

明明看题解都和我差不多,然而还是错的:

#include<bits/stdc++.h>
#define CEIL(A,B) ((A)/(B)+((A)%(B)==0?0:1))
using namespace std;
struct role
{
	int l,h;
	role():
		l(-1),
		h(1001)
	{
	}
};
int n,m,k;
int x[10001],y[10001];
role maps[10001];
int f[10001][1001];
int minw[10001];
int cnt=0;
inline void init()
{
	memset(f,0x3f,sizeof(f));
	memset(minw,0x3f,sizeof(minw));
	scanf("%d %d %d",&n,&m,&k);
	for(int i=0;i<n;i++) scanf("%d %d",&x[i],&y[i]);
	for(int i=1;i<=k;i++)
	{
		int p,l,h;
		scanf("%d %d %d",&p,&l,&h);
		maps[p].l=l;
		maps[p].h=h;
	}
}
inline void solve()
{
	for(int i=1;i<=m;i++) f[0][i]=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=max(1,maps[i].l+1);j<=min(m,maps[i].h-1);j++)
		{
			f[i][j]=min(f[i][j],f[i-1][j+y[i-1]]);
			if(j==m)
			{
				for(int k=m-x[i-1];k<=m;k++) f[i][j]=min(f[i][j],min(f[i-1][k]+1,f[i][k]+1));
			}
			else f[i][j]=min(f[i][j],min(f[i-1][j-x[i-1]]+1,f[i][j-x[i-1]]+1));
			minw[i]=min(minw[i],f[i][j]);
		}
		if(minw[i]!=0x3f3f3f3f&&maps[i].l!=-1&&maps[i].h!=1001) cnt++;
	}
//	for(int i=m;i>=0;i--)
//	{
//		for(int j=0;j<=n;j++) printf("%-3d",f[j][i]==0x3f3f3f3f?-1:f[j][i]);
//		printf("\n");
//	}
//	printf("\n\n");
//	for(int i=0;i<=n;i++) printf("%-5d",maps[i].h);
//	printf("\n");
//	for(int i=0;i<=n;i++) printf("%-5d",maps[i].l);
//	printf("\nk=%d\n",k);
}
inline void print()
{
	if(cnt==k)
	{
		int ans=0x3f3f3f3f;
		for(int i=0;i<=m;i++) ans=min(ans,f[n][i]);
		printf("1\n%d\n",ans);
	}
	else printf("0\n%d\n",cnt);
}
int main()
{
//	freopen("P1941_7.in","r",stdin);
//	freopen("P1941.txt","w",stdout);
	init();
	solve();
	print();
	return 0;
}

评测记录

2020/11/29 07:42
加载中...