码风应该还不错
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1005;
int n;
int t,dp2[N][N],dp5[N][N];
int num2[N][N],num5[N][N];
int Map[N][N];
int x,y,ans;
int tmp;
void print(int i,int j,bool k){
if(i == 1 && j == 1){
if(k)
cout << 'D';
else
cout << 'R';
return;
}
if(i == 1)
print(i,j-1,0);
else if(j == 1)
print(i-1,j,1);
else if(tmp == 0 && dp2[i][j] == dp2[i][j-1] + num2[i][j] || tmp == 1 && dp5[i][j] == dp5[i][j-1] + num5[i][j])
print(i,j-1,0);
else
print(i-1,j,1);
if(i != n || j != n)
if(k)
cout << 'D';
else
cout << 'R';
}
signed main(){
cin >> n;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
cin >> Map[i][j];
t = Map[i][j];
if(t == 0){
tmp = i;
num2[i][j] = num5[i][j] = 1;
continue;
}
while(t % 2 == 0){
t /= 2;
num2[i][j] ++;
}
while(t % 5 == 0){
t /= 5;
num5[i][j] ++;
}
}
}
for(int i = 1; i <= n; i++){
dp2[i][0] = dp2[0][i] = INT_MAX;
dp5[i][0] = dp5[0][i] = INT_MAX;
}
dp2[1][1] = num2[1][1];
dp5[1][1] = num5[1][1];
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
if(i == 1 && j == 1) continue;
dp2[i][j] = min(dp2[i][j-1],dp2[i-1][j]) + num2[i][j];
}
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
if(i == 1 && j == 1) continue;
dp5[i][j] = min(dp5[i][j-1],dp5[i-1][j]) + num5[i][j];
}
}
// cout << dp2[3][2] << " " << dp5[n][n]<< endl;
ans = min(dp2[n][n],dp5[n][n]);
if(ans > 1 && tmp){
cout << 1 << endl;
for(int i = 1; i < tmp; i++)
cout << "R";
for(int i = 1; i < n; i++)
cout << "D";
for(int i = tmp; i < n; i++)
cout << "R";
}
else{
cout << ans << endl;
tmp = !(dp2[n][n] < dp5[n][n]);
print(n,n,0);
}
return 0;
}