矩阵游戏II

把每列的数字加起来当一行处理。因为每次操作两列,所以最后最多剩下一个负数。如果负数的个数是偶数,直接所有数字的绝对值加起来即可;若负数个数为奇数,把所有数的绝对值加起来减去其中最小的绝对值的两倍即可。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int a[205][205];
int main() {
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
#endif
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &a[i][j]);
        }
    }
    for (int i = 1; i < n; i++) {
        for (int j = 0; j < n; j++) {
            a[0][j] += a[i][j];
        }
    }
    int cnt = 0, ans = 0, min = 1000000;
    for (int i = 0; i < n; i++) {
        if (a[0][i] < 0) {
            cnt++;
            a[0][i] = -1 * a[0][i];
        }
        ans += a[0][i];
        if (a[0][i] < min) {
            min = a[0][i];
        }
    }
    if (cnt % 2 != 0) {
        ans -= 2 * min;
    }
    printf("%d\n", ans);
    return 0;
}
View Code

相关文章: