効果:$ $ 101の重み、1 ^ wの重量の$ W ^ 0は、...、^ 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、N)のために(INT iは=; I <= N; ++ I) の#define PER(I、N) - (I; I> = A I = N INT)のため の#defineのHRのputchar(10) の#define PB一back の#define LC(O << 1) (| 1 LC)の#define RC の#define中間((L + R)>> 1) の#define LSのLC、L、中 の#define RSのRC、ミッド+ 1、R の#define X最初 の#define yの第二 の#define IOのstd :: IOS :: sync_with_stdio(偽) の#define ENDL '\ n'は #define DB(A)({REP(__ I、1、n)はCOUT << [__ I] <<」「;}時間) 名前空間stdを使用。 typedefの長い長いLL。 typedefのペア<int型、int型> PII。 CONST int型P = 1E9 + 7、P2 = 998244353、INF = 0x3f3f3f3f。 LLのGCD(-1,11,11- b)は{戻りB GCD(B、%のB):;} のLL qpow(-1,11,11- n)で{LLのR = 1%P;(%= Pのために、N ; = *%P、N >> = 1)であれば(N - 1)R = R *%のP、リターンR;} ?LL INV(LL X){X <= 1を返す:INV(P%以下X)*(PP / X)%P;} インラインint型RD(){int型のx = 0; CHAR 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、整数> F [2]。 無効DFS(int型D、int型MX、LL NUM、unordered_map <LL、整数>& 他{ DFS(D + 1、MX、NUM + [D]、F)。 DFS(D + 1、MX、NUM-[D]、F)。 } } int型のmain(){ scanf関数( "%D%dの"、&W、&M)。 (W <= 3)戻りプット( "YES")場合、0。 今= 1っ。 REP(I、0,16){ [++ * A]今=。 今* =ワット; } DFS(1、* / 2,0、F [0])。 DFS(* / 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、N)のために(INT iは=; I <= N; ++ I) の#define PER(I、N) - (I; I> = A I = N INT)のため の#defineのHRのputchar(10) の#define PB一back の#define LC(O << 1) (| 1 LC)の#define RC の#define中間((L + R)>> 1) の#define LSのLC、L、中 の#define RSのRC、ミッド+ 1、R の#define X最初 の#define yの第二 の#define IOのstd :: IOS :: sync_with_stdio(偽) の#define ENDL '\ n'は #define DB(A)({REP(__ I、1、n)はCOUT << [__ I] <<」「;}時間) 名前空間stdを使用。 typedefの長い長いLL。 typedefのペア<int型、int型> PII。 CONST int型P = 1E9 + 7、P2 = 998244353、INF = 0x3f3f3f3f。 LLのGCD(-1,11,11- b)は{戻りB GCD(B、%のB):;} のLL qpow(-1,11,11- n)で{LLのR = 1%P;(%= Pのために、N ; = *%P、N >> = 1)であれば(N - 1)R = R *%のP、リターンR;} ?LL INV(LL X){X <= 1を返す:INV(P%以下X)*(PP / X)%P;} インラインint型RD(){int型のx = 0; CHAR P = GETCHAR();一方、(P < '0' || P> '9')p = GETCHAR() ;一方、(P> = '0' && P <= '9')、X = X * 10 + P-'0' 、P = GETCHAR();戻りX;} //ヘッド {main()の整数 、M W INT ; scanf関数( "%d個の%のD"、&W、&M)。 一方、(M){ IF((M-1)== W%0)--m。 M / W =。 } 他M(== 0 W(M + 1)%)++であれば、 他の(m個の%w)をリターンプット( "NO")場合には、0。 プット( "YES"); }