확률 DP는 1395 lightoj

 

 DP 낮은 버전의 문제를 해결하는 것은 다음과 같이 얻어진다하는 방식과 유사한 방식에 [K];

 

 이어서 backstepping처럼 k는 0 내지

1 #INCLUDE <. 비트 / stdc ++ H>
 2  사용  스페이스 성병;
3  CONST의  INT MX = 105 ;
4  DP [MX];
5  INT (X) [MX];
6  INT 의 main () {
 7      INT T, N, K;
8      는 scanf ( " %의 D ' , T);
9       ( INT의 CAS = 1 ; CAS <= T; CAS ++ ) {
 10          memset 함수 (DP, 0 , 는 sizeof (DP));
(11)          는 scanf ( "% D % D " , 및 N, K)
 (12)          의 INT A = 0 , B,
 13           SUM1 = 0 , SUM2 = 0 ,
 14           ( int로 I = 0 ; i가 N <; 내가 ++ ) {
 15              는 scanf ( " % D ' , X [I]);
 (16)              의 경우 (X [I]> 0 ) {SUM1 + = X [I] ++ }
 17              다른 SUM2 + = ABS (X [I]);
 (18)          }
 (19)          의 경우 (a = = 0 ) {
 20             의 printf ( " 케이스 %의 D : n \ -1 " , CAS);
(21)              계속 ;
(22)          }
 도 23          (B) = N- a 및
24          의 경우 (a) SUM1 / = a 및
25          의 경우 (b) SUM2 / = B;
26          K = 분 (K, B);
27          DP [K] + = SUM1 (BK) * SUM2 / a 및
(28)          에 대한이 ( int로 I = K- 1 , I> = 0 ; 난 ... ) {
 29              DP [I] = (DP [I + 1 ] + SUM2) * (B- I);
30              DP [I]는 + * = SUM1에이;
31              DP [I] / = N- I;
32          }
 33          의 printf ( " 케이스 %의 D % .7f \ n " , CAS, DP [ 0 ]);
34      }
 35      반환  0 ;
36 }

 

추천

출처www.cnblogs.com/pangbi/p/11613992.html