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 }