最小 - 最大および除外:
$$最大\ {a_iを\} = \和\ limits_ {S}( - 1)^ {| S | -1}分間\ {a_iを| a_iを\ Sで\} $$
数の証明は、組合が対応して交差点にMAX、MINに対応取る、それは共通および除外となり、$ A $ $ \ {1 ... \} $の集合体とみなすことができます
この質問は、その後、最大DPことができます
しかし、私は立ち往生してきた精密次のコード(おそらく正しいです
1の#include <ビット/ STDC ++。H> 2の#include <TR1 / unordered_map> 3 の#define CLR(X)のmemset(X、はsizeof(A)) 4 の#define MP make_pair 5 の#define第Fiの 6 #定義 SE第 7 使って 名前空間STDを、 8 typedefの長い 長いLL。 9 typedefの符号なしの長い 長いULL。 10 typedefの長い ダブルLD; 11のtypedef対< INT、INT > PA。 12 const int型 MAXN = 55 ; 13 14 インラインLLのRD(){ 15 LL X = 0。チャー C = GETCHAR()。int型 NEG = 1 ; 16 一方、(C < ' 0 ' || C> ' 9 '){ もし、(C == ' - ')NEG = - 1 ; C = GETCHAR();} 17 ながら(C> = ' 0 ' && C <= ' 9 ')、X = X * 10 + C- ' 0'、C = GETCHAR()。 18 リターンのx *のNEG。 19 } 20 21 INT N、F [MAXN] [ 2 ] [ 2 * MAXN * MAXN]。 22 23 INT メイン(){ 24 // freopenは( ""、 "R"、STDIN)。 25 のために(INT T = RD(); T; T-- ){ 26 N = RD()。 27 LD ANS = 0 。 28 CLR(F、0); F [ 0 ] [ 0 ] [ 0 ] = 1; 29 のためには、(int型 I = 1、N + = iは< 1 ; iは++ ){ 30 のために(INT B = 0 ; B <= 1 ; B ++ ){ 31 のために(INT II = 0 ; II <I、II ++ ){ 32 用(INT J = 0 ; J <= II *(II + 1); J ++ ){ 33 F [I] [B] [J +(I-II- 1)*(I-II)] + = F [II] [ !B] [J]。 34 } 35 } 36 } 37 } 38 のために(INT B = 0 ; <= B 1 B ++; {) 39 のための(int型 J = 0 ; J <N *(N + 1); J ++ ){ 40の ANS + =(B - ?1:1)*(1。0L /(1 - 1。0L * J /(N *(N + 1))))* [N + F 1 ] [B] [J]。 41 } 42 } 43 のprintf(" %.15Lf \ nを" 、年); 44 } 45 リターン 0 。 46 }