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;
}

浙公网安备 33010602011771号