洛谷1199 简单博弈 贪心

本文解析了一道洛谷1199博弈论贪心题目,通过分析计算机选择策略,得出玩家可以确保获取每个武将次大值的结论。文章提供了完整的代码实现,展示了如何通过枚举每个武将并选取次大值来获得最优解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

洛谷 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("\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;
}

转载于:https://www.cnblogs.com/CtsNevermore/p/6012391.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值