洛谷1199 简单博弈 贪心

#洛谷 1199 博弈论 贪心

看起来挺吓人的,,,然而实际上并没有太大的难度。。
开始想这道题的时候受了之前博弈问题的影响,一直在考虑计算机也能够采用必胜策略,然后就有些混乱,后来仔细考虑,根据计算机的选择策略,一定不会让玩家取到最大值,那么玩家一定可以取到每个武将的次大值,那么对于枚举每个武将,取出他们的次大值,取max即为答案。

xs;

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

原文地址:https://www.cnblogs.com/CtsNevermore/p/6012391.html