看起来挺吓人的,,,然而实际上并没有太大的难度。。
开始想这道题的时候受了之前博弈问题的影响,一直在考虑计算机也能够采用必胜策略,然后就有些混乱,后来仔细考虑,根据计算机的选择策略,一定不会让玩家取到最大值,那么玩家一定可以取到每个武将的次大值,那么对于枚举每个武将,取出他们的次大值,取max即为答案。
;
#include <cstdio>
#include <cstring>
#include <algorithm>
const int maxn = 500 + 10;
int n;
int first_max;
int second_max;
int x;
int ans = 0;
int a[maxn][maxn];
int main () {
scanf("%d", &n);
for (int i = 1; i < n; i++) {
for (int j = 1; j <= n - i; j++) {
scanf("%d", &a[i][i + j]);
a[i + j][i] = a[i][i + j];
}
}
//for (int i = 1; i <= n; i++) {
// for (int j = 1; j <= n; j++) {
// printf("%d ", a[i][j]);
// }
// printf("
");
//}
for (int i = 1; i <= n; i++) {
first_max = 0;
second_max = 0;
for (int j = 1; j <= n; j++) {
if (i == j) continue;
if (a[i][j] > first_max) {
second_max = first_max;
first_max = a[i][j];
} else if (a[i][j] <= first_max && a[i][j] > second_max) {
second_max = a[i][j];
}
}
ans = std :: max(ans, second_max);
}
printf("1
");
printf("%d", ans);
return 0;
}