51nod 1293

递推

#include <bits/stdc++.h>

const int N = 1e3 + 10;

int A[N][N];
int n, m;
long long k, Sum[N][N][2];

inline long long read() {
    long long x; char c = getchar();
    while(c < '0' || c > '9') c = getchar();
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x;
}

int main() {
    std:: cin >> m >> n >> k;
    for(int i = 1; i <= n; i ++) for(int j = 1; j <= m; j ++) std:: cin >> A[i][j];
    for(int i = 1; i <= n; i ++) {
        for(int j = 1; j <= m; j ++) {
            if(i == 1 && j == 1) {
                if(A[1][1] == 1) Sum[1][1][1] = (k + 1) >> 1, Sum[1][1][0] = k >> 1;
                else if(A[1][1] == -1) Sum[1][1][0] = (k + 1) >> 1, Sum[1][1][1] = k >> 1;
                else Sum[1][1][0] = k;
            } else {
                long long tmp = Sum[i - 1][j][0] + Sum[i][j - 1][1];
                if(!A[i][j]) Sum[i][j][0] = Sum[i - 1][j][0], Sum[i][j][1] = Sum[i][j - 1][1];
                else if(A[i][j] == 1) Sum[i][j][1] = (tmp + 1) >> 1, Sum[i][j][0] = tmp >> 1;
                else Sum[i][j][0] = (tmp + 1) >> 1, Sum[i][j][1] = tmp >> 1;
            }
        }
    }
    std:: cout << Sum[n][m][0];
    return 0;
}
/*
3 2 4
-1 0 -1
1 0 0
*/

猜你喜欢

转载自www.cnblogs.com/zjoiak/p/9255123.html