求助报错
  • 板块学术版
  • 楼主AoPSer
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/1/20 22:22
  • 上次更新2023/10/28 11:43:45
查看原帖
求助报错
417477
AoPSer楼主2022/1/20 22:22

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1001;
int f[N][N][2],pos=-1,n,k;
string ans;
int main(){
	scanf("%d",&n);
	for(register int i=1;i<=n;i++)
	{
		for(register int j=1;j<=n;j++)
		{
			int x;
			scanf("%d",&x);
			if(x==0)
			{
				pos=i;
				continue;
			}
			int t=x;
			while(t%2==0)
			{
				t/=2;
				f[i][j][0]++;
			}
			t=x;
			while(t%5==0)
			{
				t/=5;
				f[i][j][1]++;
			}
		}
	}
	for(register int i=2;i<=n;i++)f[i][1][0]+=f[i-1][1][0],f[i][1][1]+=f[i-1][1][1],f[1][i][0]+=f[1][i-1][0],f[1][i][1]+=f[1][i-1][1];
	for(register int i=2;i<=n;i++)for(register int j=2;j<=n;j++)f[i][j][0]+=min(f[i][j-1][0],f[i-1][j][0]),f[i][j][1]+=min(f[i][j-1][1],f[i-1][j][1]);
	if(f[n][n][0]>f[n][n][1])k=1;
	if(pos!=-1&&f[n][n][k]>0)
	{
		printf("1\n");
		for(register int i=1;i<pos;i++)printf("D");
		for(register int i=1;i<n;i++)printf("R");
		for(register int i=pos;i<n;i++)printf("D");
		return 0;
	}
	int x=n,y=n;
	while(true)
	{
		if(x==1)for(register int i=y;i>1;i++)
		{
			ans="D"+ans;
			break;
		}
		if(y==1)for(register int i=x;i>1;i++)
		{
			ans="R"+ans;
			break;
		}
		if(f[x-1][y][k]<f[x][y-1][k])ans="R"+ans,x--;
		else ans="D"+ans,y--;
	}
	printf("%d\n%s",f[n][n][k],ans);
	return 0;
}

报错信息(调试中显示的): f=<error:value requires 8016008 bytes,which is more than max-value-size>

2022/1/20 22:22
加载中...