您的位置:首页 > 其它

洛谷1199 简单博弈 贪心

2016-11-08 11:20 232 查看

洛谷 1199 博弈论 贪心

看起来挺吓人的,,,然而实际上并没有太大的难度。。

开始想这道题的时候受了之前博弈问题的影响,一直在考虑计算机也能够采用必胜策略,然后就有些混乱,后来仔细考虑,根据计算机的选择策略,一定不会让玩家取到最大值,那么玩家一定可以取到每个武将的次大值,那么对于枚举每个武将,取出他们的次大值,取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("\n");
//}
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\n");
printf("%d", ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: