cf1695 C. Zero Path

题意:

给定矩阵,\(a_{ij}\in\{-1,1\}\),每一步能向下或向右走一步,问是否存在一条从左上到右下的路径使得走过的数之和为 0

思路:

remake吧,div2C都不会

dp 找左上走到右下的最大价值和最小价值

\(n>1\)\(m>1\),那么路径上一定至少有一次转折,比如右→下,把它改成下→右能使价值 +2/不变/-2

通过这种修改可以构造出所有可能的路径

所以能达到最小值与最大值之间与他俩奇偶性相同的任一价值

void init() {
    memset(f, -INF, sizeof f); f[0][1] = 0;
    memset(g, INF, sizeof g); g[0][1] = 0;
}
bool sol() {
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
        for(int j = 1, x; j <= m; j++) cin >> x,
            f[i][j] = max(f[i-1][j], f[i][j-1]) + x,
            g[i][j] = min(g[i-1][j], g[i][j-1]) + x;
    return f[n][m] >= 0 && g[n][m] <= 0 &&
           f[n][m] % 2 == 0 && g[n][m] % 2 == 0;
}
posted @ 2022-06-19 13:05  Bellala  阅读(139)  评论(0)    收藏  举报