2015年4月10日 星期五

TIOJ 1196 小豬Piggy

#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <algorithm>
using namespace std;
char s[15][15];
int dp[15][15];

int main(){
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; ++i)
        scanf("%s", s[i]);

    memset(dp, -1, sizeof(dp));

    dp[0][0] = 0;
    for (int i = 1; i < n; ++i){
        if(dp[i - 1][0] >= 0 && s[i][0] != 'X')
            dp[i][0] = dp[i - 1][0] + s[i][0] - '0';

        if(dp[0][i - 1] >= 0 && s[0][i] != 'X')
            dp[0][i] = dp[0][i - 1] + s[0][i] - '0';
    }

    for (int i = 1; i < n; ++i)
    for (int j = 1; j < n; ++j){
        if(s[i][j] == 'X')
            continue;

        if(dp[i - 1][j] < 0){
            if(dp[i][j - 1] < 0)
                continue;
            dp[i][j] = dp[i][j - 1] + s[i][j] - '0';
        }
        else if(dp[i][j - 1] < 0)
            dp[i][j] = dp[i - 1][j] + s[i][j] - '0';
        else
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + s[i][j] - '0';
    }

    if(dp[n - 1][n - 1] == -1)
        printf("X\n");
    else
        printf("%d\n", dp[n - 1][n - 1] - 'B' + '0');
}

沒有留言:

張貼留言