矩阵游戏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; }