题解-[NOIP2010]三国游戏

题目链接

洛谷

题目描述

小涵和计算机玩三国游戏,小涵先手计算机后手,每回合每人选一位未被选过的武将
每两位武将都有不同的默契值,最后两方从自己阵容里选出默契值最高的一对武将相比较,默契值高的一方胜
计算机的策略是:在未被选择的武将中选择x,使得x与小涵阵容里的一位武将y之间的默契值是全场最高的。也就是说选出小涵下一轮的最优选择
给出所有武将之间的默契值,求小涵是不是必胜,如果必胜,她阵容中的最高默契值是多少

题解

个人认为近年来NOIP PJ T4最简单的一题,纯思维题,代码极其简单。
所以一看就是博弈论

先不考虑第一个问题
我们先想一下小涵采用的最优策略是什么,如果有必胜策略,那她一定能赢(废话)

分析题目,我们可以发现计算机每一轮都会选出小涵下一轮的最优选择,既然这样,小涵最多就只能选到原来第二优的选择了。
看起来又是一句废话,但接着想下去,小涵每次只能选到第二优的选择,又由于她每轮都能选到第二优的选择,那么他阵容里默契值最大的就是所有第二优选择里最优的,如果把默契值列成一张表格,如下图,那么就是每行(或每列)里第二大的数里的最大值

武将编号 1 2 3 4
1 \
2 \
3 \
4 \

那么这个数是不是一定比计算机阵容里最大的数大?
答案是肯定的

因为计算机每轮都会阻止小涵选到最大的,所以它也选不到最大的。因为每轮最大的两个人分别分布在两方的阵容里。

所以,
小涵必胜。

代码:

#include 
using namespace std;
int a[510][510];
bool cmp(int x,int y){
	return x>y;
}
int main(){
	int n,ans=0;
	cin>>n;
	for(int i=0;i<n-1;i++){
		for(int j=i+1;j<n;j++){
			cin>>a[i][j];
			a[j][i]=a[i][j];
		}
	}
	for(int i=0;i<n;i++){
		sort(a[i],a[i]+n,cmp);
		ans=max(ans,a[i][1]);
	}
	cout<<1<<endl<<ans<<endl;
}

创作时间:

2019-9-9

你可能感兴趣的:(2019秋,CSP-P)