代码:
#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>