P1199三国游戏(博弈论)

一堆武将,两两之间有个默契值,你先选然后机器选和你匹配的默契值最大的武将,意思就是不让你选最大的,这个时候一顿分析,(你拿了默契值最大的一个,另一个肯定被机器拿了,所以谁都拿不到最大的,机器拿完又是你选的了,这时你就可以选和你手上的这个匹配的默契值最大的),所以人是必胜的,最大的肯定是第二大的之中最大的

意思就是28,23,28,16,32,26(每一行的第二大)之中最大的,直接做出这样一个表,然后找答案就好了

 1 #include<climits>
 2 #include<iostream>
 3 using namespace std;
 4 const int N=550;
 5 int mp[N][N];
 6 int n;
 7 const int inf=INT_MAX;
 8 int main()
 9 {
10     cin>>n;
11     for(int i=1;i<=n-1;i++)
12     {
13         for(int j=i+1;j<=n;j++)
14         {
15             cin>>mp[i][j];
16             mp[j][i]=mp[i][j];
17         }
18     }
19     for(int i=1;i<=n;i++)
20     {
21         mp[i][i]=-inf;
22     }//以上都是初始化
23     int ans=-inf;
24     for(int i=1;i<=n;i++)//循环每一行
25     {
26         int first=-inf,second=-inf;//从每一行找出第一大的,和第二大的
27         for(int j=1;j<=n;j++)
28         {
29             if(mp[i][j]>first)
30             {
31                 second=first;
32                 first=mp[i][j];
33             }
34             else if(mp[i][j]>second)
35             {
36                 second=mp[i][j];
37             }
38         }
39         ans=max(ans,second);//更新ans
40     }
41     cout<<1<<endl;//因为人必胜,输出1
42     cout<<ans;
43     return 0;
44 }

猜你喜欢

转载自www.cnblogs.com/greenofyu/p/12215642.html