75分求助
查看原帖
75分求助
110835
彭天宇楼主2020/11/11 20:55

发现有一些75分与我WA的一模一样。

然而就是不知道哪里出锅了。

#include<bits/stdc++.h>
using namespace std;
const int N=10002;
const int M=1002;
int n,m,K,up[N],minn=0x3f3f3f3f,down[N],f[N][M][2],sum[N];
int upcell(int x,int y){
	int tmp=0;
	if(x==0)return 1;
	if(x%y)tmp++;
	tmp+=x/y;
	return tmp;
}
int main(){
	scanf("%d%d%d",&n,&m,&K);
	for(int i=0;i<n;i++)scanf("%d%d",&up[i],&down[i]);
	memset(f,0x3f,sizeof f);
	for(int i=1;i<=m;i++)f[0][i][0]=f[0][i][1]=0;
	for(int i=1;i<=K;i++){
		int p,l,h;
		scanf("%d%d%d",&p,&l,&h);
		sum[p]++;
		for(int j=1;j<=l;j++)f[p][j][0]=f[p][j][1]=-1;
		for(int j=h;j<=m;j++)f[p][j][0]=f[p][j][1]=-1;
	}
	for(int i=1;i<=n;i++)sum[i]=sum[i-1]+sum[i];
	for(int i=1;i<=n;i++){
		if(f[i][m][0]!=-1)
			for(int j=1;j<=m;j++){
				if(f[i-1][j][0]!=-1&&f[i-1][j][0]<=1e9)f[i][m][0]=min(f[i][m][0],f[i-1][j][0]+upcell(m-j,up[i-1]));
				if(f[i-1][j][1]!=-1&&f[i-1][j][1]<=1e9)f[i][m][0]=min(f[i][m][0],f[i-1][j][1]+upcell(m-j,up[i-1]));
			}
		for(int j=1;j<=m;j++){
			if(f[i][j][0]==-1)continue;
			if(j-up[i-1]>0&&f[i-1][j-up[i-1]][0]!=-1&&f[i-1][j-up[i-1]][0]<=1e9)f[i][j][0]=min(f[i][j][0],f[i-1][j-up[i-1]][0]+1);
			if(j-up[i-1]>0&&f[i-1][j-up[i-1]][1]!=-1&&f[i-1][j-up[i-1]][1]<=1e9)f[i][j][0]=min(f[i][j][0],f[i-1][j-up[i-1]][1]+1);
			if(j-up[i-1]>0&&f[i][j-up[i-1]][0]!=-1&&f[i][j-up[i-1]][0]<=1e9)f[i][j][0]=min(f[i][j][0],f[i][j-up[i-1]][0]+1);
			if(j+down[i-1]<=m&&f[i-1][j+down[i-1]][0]!=-1&&f[i-1][j+down[i-1]][0]<=1e9)f[i][j][1]=min(f[i][j][1],f[i-1][j+down[i-1]][0]);
			if(j+down[i-1]<=m&&f[i-1][j+down[i-1]][1]!=-1&&f[i-1][j+down[i-1]][1]<=1e9)f[i][j][1]=min(f[i][j][1],f[i-1][j+down[i-1]][1]);
		}
		bool flag=false;
		for(int j=1;j<=m;j++)if(f[i][j][0]<=1e9&&f[i][j][0]!=-1||f[i][j][1]<=1e9&&f[i][j][1]!=-1)flag=true;
		if(!flag){
			printf("0\n");
			printf("%d\n",sum[i-1]);
			return 0;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++)printf("%d ",min(f[i][j][0],f[i][j][1]));
		printf("\n");
	}
	for(int i=1;i<=m;i++)minn=min(minn,min(f[n][i][0],f[n][i][1]));
	printf("1\n");
	printf("%d\n",minn);
	return 0;
}
2020/11/11 20:55
加载中...