90分求助,调1h了
查看原帖
90分求助,调1h了
480934
xqqQwQ_楼主2022/7/7 16:57

一直WA在#8和#13

#include<bits/stdc++.h>

using namespace std;

int mapn[10001][1001];
int dp[10001][1001];
int x[10001],y[10001];
int sss[10001];
int n,m,k;

int main()
{
	// freopen("P1941_8.in","r",stdin);
	// freopen("bird.out","w",stdout);
	cin>>n>>m>>k;
	// cout<<n<<" "<<m<<" "<<k<<endl;
	for(int i=1;i<=n;i++) cin>>x[i]>>y[i];
	for(int i=1;i<=k;i++)
	{
		int p,l,h;
		cin>>p>>l>>h;
		for(int j=1;j<=l;j++) mapn[p][j]=1;
		for(int j=m;j>=h;j--) mapn[p][j]=1;
		sss[p]++;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++) dp[i][j]=999999999;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=x[i]+1;j<=m+x[i];j++)  dp[i][j]=min(dp[i-1][j-x[i]]+1,dp[i][j-x[i]]+1);
		for(int j=m+1;j<=m+x[i];j++) if(!mapn[i][j]) dp[i][m]=min(dp[i][m],dp[i][j]);
		for(int j=1;j<=m-y[i];j++) if(!mapn[i][j]) dp[i][j]=min(dp[i][j],dp[i-1][j+y[i]]);
		for(int j=1;j<=m;j++) if(mapn[i][j]) dp[i][j]=999999999;
	}
	// for(int i=m;i>=0;i--)
	// {
	// 	for(int j=0;j<=n;j++) 
	// 	{
	// 		if(dp[j][i]>=999999999) cout<<'A'<<" ";
	// 		else cout<<dp[j][i]<<" ";
	// 	}
	// 	cout<<endl;
	// }
	int minans=999999999;
	int cnt2=0;
	for(int i=1;i<=n;i++)
	{
		bool flag=0;
		for(int j=1;j<=m;j++) if(dp[i][j]<10000001) flag=1;
		if(flag==0) 
		{
			cout<<0<<endl;
			cout<<cnt2<<endl;
			return 0;
		}
		cnt2+=sss[i];
	}
	cout<<1<<endl;
	for(int j=1;j<=m;j++)
	{
		if(dp[n][j]<=minans) minans=dp[n][j];
	}
	cout<<minans<<endl;
	return 0;
}

2022/7/7 16:57
加载中...