P1199 [NOIP2010 普及组] 三国游戏

https://www.luogu.com.cn/problem/P1199
贪心,博弈论
黄色题
思路:
小涵和电脑都拿不到每个武将的最大默契值,因为小涵每拿起最大组合的其中一个,另一个就被电脑拿走了,但是电脑也无法占有该组合的最大值,因为另一个在小涵手里,这个组合的最大值其实就作废了。但是小涵在第二次选将时可以拿到第一次选中的武将的次大默契值组合。在双方都拿不到最大默契值的情况下,显然谁拿到次大默契组合的最大值,谁就赢了。
博弈论重点分析两点:1.什么时候可以判定胜利者,2.先手的影响。
#include<bits/stdc++.h>
using namespace std;

//放到 main 外面去定义可以得到的好处:数组 mo 的中所有元素都会被默认赋值为 0
int mo[501][501],n;
int main()
{
    cin>>n;
    // 构造二维数组要用嵌套的 fo r循环,i 写入到数组第一维,j 写到数组第二维
    for(int i=1;i<=n;i++) {
        for(int j=i+1;j<=n;j++) {
            cin>>mo[i][j];
            //(i,j) 的对称位置是(j,i)
            mo[j][i]=mo[i][j];
        }
    }
    //ans 保存二维数组每一行次大值中的最大值
    int ans = 0;
    //对数组的第二维进行排序
    for(int i=1;i<=n;i++)
    {
        //对 mo 的每一行都排序,sort 默认是从小到大的
        sort(mo[i],mo[i]+n+1);
        //排序后每一行第二大的值是 mo[i][n-1]
        if(mo[i][n-1] > ans) 
            ans = mo[i][n-1];
    }

    cout<<1<<endl<<ans;
    return 0;
}

 

posted @ 2022-08-08 10:06  -イレイナ  阅读(125)  评论(0)    收藏  举报