解答本题,必须看清题意,知道以下几点:
一、只需要选两次,由于比胜负靠的是双方武将中默契值最大的一对,所以除了默契值最大的一对,其他的武将都是没用的。并因为小涵先选,并且题目要求输出默契值尽量大的。所以必须两次定胜负,只要一开始选择最优方案,之后也就可以不用考虑了。
二、再深入分析,就会发现,小涵是输不了的。这是因为小涵永远掌握主动权,计算机一直都只是应付小涵,且大家可以举例证明——小涵选一个将,计算机选走搭配默契值最大的武将,然后小涵选走默契值次大的武将,计算机把小涵选走的两个武将中剩下搭配方案里默契值最大的选走。到这里就已经定下了胜负。此时,如果计算机的最大默契值比小涵的小,那么毫无疑问小涵就赢了。而如果计算机的武将搭配默契值比小涵的大,那么小涵完全可以换方法选,从计算机的方案的角度选,得到更优方案。依此类推,必定能赢。所以无论如何,小涵总会赢,我们可以直接把那个“1”输出来。大家如果光看我的描述不能理解,可以自己举例子仿照样例画一张表,就能理解了。
三、逐步分析所有情况,会发现。在一个武将和其他所有武将的搭配方案中,默契值最大的是拿不到的。因为小涵不能一下选两个,计算机又要和小涵抢。得到默契值最大的搭配方案,那是不可能的,想都别想。但是,小涵也没有这么悲剧,这个游戏规则也有对小涵有利的一面。在一个武将和其他武将的搭配中,默契值次大的那对,小涵可以稳拿。因为计算机会死板地被默契值最大的那对引开。这样搭配后默契值次大的武将,小涵就可以轻而易举地获得。
b,c:array[0..500]of 0..1000000000;
n,i,j:1..500;
begin
readln(n);
for i:=1 to n-1 do
for j:=i+1 to n do begin
read(a[i,j]);
a[j,i]:=a[i,j];
end;
writeln(1);
for i:=1 to n do begin
for j:=1 to n do if a[i,j]>b[i] then b[i]:=a[i,j];
for j:=1 to n do if (a[i,j]>c[i])and(a[i,j]<b[i]) then c[i]:=a[i,j];
if c[i]>b[0] then b[0]:=c[i];
end;
writeln(b[0]);
end.