hdu4624エンドレススピン(最小 - 最大容斥+ DP)

最小 - 最大および除外:

$$最大\ {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対< INTINT > 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 - ?11)*(10L /(1 - 10L * J /(N *(N + 1))))* [N + F 1 ] [B] [J]。
41              }
 42          }
 43          のprintf(" %.15Lf \ nを" 、年);
44      }
 45      リターン 0 46 }

 

おすすめ

転載: www.cnblogs.com/Ressed/p/10988477.html