求助为什么 MLE 本蒟蒻的代码
#include<bits/stdc++.h>
#define ll long long
#define inf 100000000
using namespace std;
int n,dp[1001][1001][2],a[1001][1001][2],ans,f;
void write(int i,int j,int k){
if(i==1&&j==1){
if(k==1){
putchar('D');
return ;
}
putchar('R');
}
if(i==1){
write(i,j-1,0);
}
else{
if(j==1){
write(i-1,j,1);
}
else{
if(dp[i][j][f]==dp[i][j-1][f]+a[i][j][f]){
write(i,j-1,0);
}
else{
write(i-1,j,1);
}
}
}
if(i==n&&j==n){
return ;
}
if(k==1){
putchar('D');
return ;
}
putchar('R');
return ;
}
signed main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
int rea;
scanf("%d",&rea);
if(rea==0){
a[i][j][0]=a[i][j][1]=1;
if(f==0){
f=i;
}
continue;
}
while(rea%2==0){
a[i][j][0]++;
rea/=2;
}
while(rea%5==0){
a[i][j][1]++;
rea/=5;
}
}
}
for(int i=1;i<=n;i++){
dp[i][0][1]=dp[i][0][0]=dp[0][i][0]=dp[0][i][1]=inf;
}
dp[1][1][0]=a[1][1][0],dp[1][1][1]=a[1][1][1];
for(int k=0;k<=1;k++){
for(int j=2;j<=n;j++){
dp[1][j][k]=dp[1][j-1][k]+a[1][j][k];
}
for(int i=2;i<=n;i++){
for(int j=1;j<=n;j++){
dp[i][j][k]=min(dp[i-1][j][k],dp[i][j-1][k])+a[i][j][k];
}
}
}
ans=min(dp[n][n][1],dp[n][n][0]);
if(f!=0&&ans>1){
for(int i=1;i<=f-1;i++){
putchar('D');
}
for(int j=1;j<=n-1;j++){
putchar('R');
}
for(int k=f;k<=n-1;k++){
putchar('D');
}
return 0;
}
printf("%d\n",ans);
if(dp[n][n][0]>dp[n][n][1]){
f=1;
}
write(n,n,0);
}