매일 질문 day6 펀치
분석
압력 DP처럼
DP [I] [J] + DP = [I-1] [K];
1 #INCLUDE <iostream> 2 #INCLUDE <cstdio> 3 #INCLUDE <CString을> 4 #INCLUDE <알고리즘> 5 #INCLUDE <cmath> 6 #DEFINE maxn 5000 + 10 7 #DEFINE 개조 100,000,000 8 사용 스페이스 성병; 9 인라인 INT의 판독 () 10 { 11 INT (X) = 0 ; 12 부울 F = 1 ; 13 문자 C = getchar가 (); 14 대 (! isdigit에 (c) C = getchar가 ()) 만약(c == ' - ' ) F = 0 ; 15 대 (; isdigit에 (c) C = getchar가 ()) = X (X << 3 ) + (X << 1 ) + C - ' 0 ' ; 16 의 경우 (F) 리턴 X; 17 창 0 - X; 18 } 19 인라인 빈 기록 ( INT X) 20 { 21 일 경우 (X < 0 ) {putchar ( ' - ' ) = X - X} 22 의 경우 (x> 9) 물품 (X / 10 ); 23 putchar (X의 % 10 + ' 0 ' ); 24 } 25 의 INT m, N; 26 의 INT t, X, CNT = 0 ; 27 의 INT 드 [ 20 ] [maxn, NUM [ 20 ]; 28 긴 긴 DP [ 20 ] [maxn, ANS; 29 인라인 공극 수 ( INT a) 30 { 31 , CNT = 0 ; 32 대 ( int로 I =0 ; i가 (< 1 << N) 내가 ++ ) 33 { 34 의 경우 ((I & (나는 << 1 )) || (I & (I >> 1 )) || (I & t)) 계속 ; 35 드 [A] [++ CNT = I; 36 } 37 NUM [A] = CNT; 38 } 39 INT 의 main () 40 { 41 memset 함수 (DP, 0 , 는 sizeof (DP)); 42 M = () 읽기, N = ) (판독; (43) 에 대한이 ( 값 int = 1을 1 ; I <= m; 내가 ++ ) 44 { 45 T = 0 ; 46 대 ( INT의 J = 1 ; J <= N; J ++ ) 47 { 48 , X = 판독 (); (49) t = (t << 1 ) + 1 - X; 50 } 51 횟수 (I); 52 } 53 대 ( int로 I = 1 ; I <NUM = [ 1 ]은 I ++) DP [ 1 ] [I] = 1 ; 54 대 ( int로 I =2 ; I <= m; 내가 ++ ) 55 { 56 대 ( INT의 J = 1 , j는 <= NUM [I]을; j는 ++ ) 57 { 58 대 ( INT에 K = 1 ; K <= NUM [I- 1 ], 케이 ++ ) 59 { 60 의 경우 (DE [I] [J] 드 [Ⅰ- 1 ] [K]) 계속 ; 61 DP [I] [J] + DP = [I- 1 ] [K]; 62 } 63 } 64 } 65 대 ( INTI = 1 ; I <NUM = [m]은, 난 ++ ) 66 { 67 ANS + = DP [m] [I]; 68 ANS % = 개조; 69 } 70 기입 (ANS); 71 반환 0 ; 72 }
갱스터의 논문을주세요(어쨌든, 나는이 논문을 무엇을 의미하는지 모른다)