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