【題解】TIOJ 1196 . 小豬Piggy

【題目敘述】https://tioj.ck.tp.edu.tw/problems/1196
【解題想法】DP

#include <iostream>
using namespace std;

int n, a[10][10], dp[10][10];
char c;

int main() {
    cin >> n;
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            cin >> c;
            if (c-'0'>=0 && c-'0'<=9) a[i][j] = c-'0';
            else a[i][j] = -1;
        }
    }
    a[0][0] = 0;
    a[n-1][n-1] = 0;
    dp[0][0] = 0;
    for (int i = 1; i < n; i++){
        if (dp[i-1][0] == -1 || a[i][0] == -1) dp[i][0] = -1;
        else dp[i][0] = dp[i-1][0] + a[i][0];
        if (dp[0][i-1] == -1 || a[0][i] == -1) dp[0][i] = -1;
        else dp[0][i] = dp[0][i-1] + a[0][i];
    }
    for (int i = 1; i < n; i++){
        for (int j = 1; j < n; j++){
            if (a[i][j] == -1 || (dp[i-1][j] == -1 && dp[i][j-1] == -1)){
                dp[i][j] = -1;
                continue;
            }
            if (dp[i][j-1] != -1) dp[i][j] = max(dp[i][j], dp[i][j-1]+a[i][j]);
            if (dp[i-1][j] != -1) dp[i][j] = max(dp[i][j], dp[i-1][j]+a[i][j]);
        }
    }
    if (dp[n-1][n-1] == -1) cout << "X\n";
    else cout << dp[n-1][n-1] << "\n";
}
分享本文 Share with friends