효과 : $ A $ 101 중량, 중량을 w $ ^ 0 ^ w 1, ..., 100 $ ^ w를 칭량 $ 찾을 수의 m을 $.
<= 3 승 분명히, 그렇지 않으면 당신은 이중 종료 할 수있는 검색 폭력을 모든 무게를 호출 할 수 있습니다 때.
사용법 #include <iostream> #INCLUDE <sstream> #INCLUDE <알고리즘> #INCLUDE <cstdio> #INCLUDE <math.h> #INCLUDE <설정> #INCLUDE <지도> #INCLUDE <unordered_map도> #INCLUDE <큐> #INCLUDE < 문자열> #INCLUDE <string.h> #INCLUDE <비트 세트> #DEFINE REP (I, A, N)에 대해 INT (나는 A =; I <= N; ++ I) #DEFINE PER (I, A, N) 경우 (나는> = A, I는 = N에서 INT - I) #DEFINE 열연 putchar (10) #DEFINE PB와 push_back #DEFINE LC (O << 1) #DEFINE의 RC (LC | 1) #DEFINE 미드 ((L + R) >> 1) #DEFINE의 LS의 LC, L, 중간 #DEFINE 중계국의 RC 중간 + 1R #DEFINE 먼저 X #DEFINE Y 제 #DEFINE IO 표준 : IOS :: sync_with_stdio (FALSE) N '\'를 #DEFINE의 ENDL #DEFINE DB (a) (REP {(__ I, 1, N) COUT << A [__ 난] << ', HR}) 를 사용 스페이스 성병; 타입 정의 오래 오래 LL; 쌍 타입 정의 <INT, INT> PII; CONST INT의 P = 1E9 + 7, P2 = 998,244,353, INF = 0x3f3f3f3f; LL의 GCD (LL A, LL의 b) {리턴 B GCD (B, A % B)을?를} LL의 qpow (LL A, LL 않음) {LL의 R = 1 % P] (a % = P에 대한 n은 ; A = A * %의 P, N >> = 1)의 경우 (n은 1) R = R *는 %의 P, 리턴 R} LL의 반전 (LL의 X) {반환 X <= 1 : INV (P %의 X) * (PP / X) %의 P} 인라인 INT의 RD () {INT (X) = 0; 숯 p = getchar가 (); 반면 (p <0 || p> '9') p = getchar가 () ; 반면 (p> = 0 && p <= '9') (X) = (X) * 10 + P-'0 'p = getchar가 (); 리턴 X} // 헤드 INT, m w; LL이 [100]; unordered_map도 <LL, INT> F [2]; 보이드 DFS (INT의 D, INT의 MX, LL NUM, unordered_map도 <LL, INT> & 또 { DFS (d + 1, MX, NUM + A [D], F); DFS (d + 1, MX, NUM-A [D], F); } } INT의 main () { 는 scanf ( "%의 D % d에", w, m); 만약 (w <= 3) 창 둔다 ( "YES"), 0; 이제 1 = 어떠냐; REP (Ⅰ 경우 0) { A는 [++ *는 이제 =; 지금 * = w; } DFS (1 * A / 2,0, F [0]); DFS (* A / 2 + 1, *는 0, F [1]); 대 (자동 && t : F [0]) { 경우 리턴 둔다 ( "YES") ([1] .count (t.x m + F)), 0; } 둔다 ( "NO"); }
실제로 더 나은 방법이있다.
사용법 #include <iostream> #INCLUDE <sstream> #INCLUDE <알고리즘> #INCLUDE <cstdio> #INCLUDE <math.h> #INCLUDE <설정> #INCLUDE <지도> #INCLUDE <unordered_map도> #INCLUDE <큐> #INCLUDE < 문자열> #INCLUDE <string.h> #INCLUDE <비트 세트> #DEFINE REP (I, A, N)에 대해 INT (나는 A =; I <= N; ++ I) #DEFINE PER (I, A, N) 경우 (나는> = A, I는 = N에서 INT - I) #DEFINE 열연 putchar (10) #DEFINE PB와 push_back #DEFINE LC (O << 1) #DEFINE의 RC (LC | 1) #DEFINE 미드 ((L + R) >> 1) #DEFINE의 LS의 LC, L, 중간 #DEFINE 중계국의 RC 중간 + 1R #DEFINE X는 제 #DEFINE Y 초 #DEFINE IO 표준 : IOS :: sync_with_stdio (FALSE) N '\'를 #DEFINE의 ENDL #DEFINE DB (a) (REP {(__ I, 1, N) COUT << A [__ 난] << ', HR}) 를 사용 스페이스 성병; 타입 정의 오래 오래 LL; 쌍 타입 정의 <INT, INT> PII; CONST INT의 P = 1E9 + 7, P2 = 998,244,353, INF = 0x3f3f3f3f; LL의 GCD (LL A, LL의 b) {리턴 B GCD (B, A % B)을?를} LL의 qpow (LL A, LL 않음) {LL의 R = 1 % P] (a % = P에 대한 n은 ; A = A * %의 P, N >> = 1)의 경우 (n은 1) R = R *는 %의 P, 리턴 R} LL의 반전 (LL의 X) {반환 X <= 1 : INV (P %의 X) * (PP / X) %의 P} 인라인 INT의 RD () {INT (X) = 0; 숯 p = getchar가 (); 반면 (p <0 || p> '9') p = getchar가 () ; 반면 (p> = 0 && p <= '9') (X) = (X) * 10 + P-'0 'p = getchar가 (); 리턴 X} // 헤드 {) (주 INT , m w INT ; scanf와 ( "%의 D % d에", w, m); 반면 (m) { 경우 ((m-1) == 0 w %) --m; ++ m 다른 경우 (== 0 W (m + 1) %); 다른 (m에서의 w %) 복귀 둔다 ( "NO")의 경우, 0; m / = w; } 풋 ( "YES"); }