CF2B The least round way

题目

样例

3
1 2 3
4 5 6
7 8 9
0
DDRR

题解


CODE

#include<bits/stdc++.h>
using namespace std;
const int N = 1010;

int dp[N][N][2];

int main(){
    int n;
    scanf("%d", &n);
    int pos = -1, x;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            scanf("%d", &x);
            if(x == 0){
                pos = i;
                continue;
            }
            int t = x;
            while(t % 2 == 0){
                dp[i][j][0]++;
                t /= 2;
            }
            t = x;
            while(t % 5 == 0){
                dp[i][j][1]++;
                t /= 5;
            }
        }
    }
    for(int i = 2; i <= n; i++){
        dp[i][1][0] += dp[i - 1][1][0];
        dp[i][1][1] += dp[i - 1][1][1];
        dp[1][i][0] += dp[1][i - 1][0];
        dp[1][i][1] += dp[1][i - 1][1];
    }
    for(int i = 2; i <= n; i++){
        for(int j = 2; j <= n; j++){
            dp[i][j][0] += min(dp[i-1][j][0], dp[i][j-1][0]);
            dp[i][j][1] += min(dp[i-1][j][1], dp[i][j-1][1]);
        }
    }
    string ans;
    int k = 0;
    if(dp[n][n][0] > dp[n][n][1]){
        k = 1;
    }
    if(pos != -1 && dp[n][n][k] > 0){
        printf("1\n");
        for(int i = 1; i < pos; i++){
            printf("D");
        }
        for(int i = 1; i < n; i++){
            printf("R");
       }
       for(int i = pos; i < n; i++){
           printf("D");
       }
       return 0;
    }
    int i = n, j = n;
    while(true){
        if(dp[i - 1][j][k] < dp[i][j - 1][k]){
            i--;
            ans += "D";
        }else{
            j--;
            ans += "R";
        }
        if(i == 1){
            for(int x = 1; x < j; x++)  ans += "R";
            break;
        }
        if(j == 1){
            for(int x = 1; x < i; x++)  ans += "D";
            break;
        }
    }
    printf("%d\n", dp[n][n][k]);
    for(int i = ((int)ans.length() - 1); i >= 0; i--){
        printf("%c", ans[i]);
    }
    return 0;
}
posted @ 2020-10-31 23:42  LT-Y  阅读(80)  评论(0)    收藏  举报