6日中豪西
クラシックタイトル:石の合併
杭は、排他的OR(^)のうちのいずれかを考慮して組み合わせることができると
F [S]花のコストに相当するバイナリ石の山に合流よ
サブセットsの列挙
書式#include <iostreamの> 使用して名前空間はstdを、INT メイン() { CIN >> N。 用(INT A = 0 ; <N; ++ ) CIN >> Z [A]。 用(INT A = 0 ; <(1 << N); ++ ) のための(INT B = 0、B <N; B ++ ) 場合(A&(1 << b)参照) の和[A] + = Z [ B]。 memsetの(F、0x3fを 、はsizeof (F))。 用(INT A = 0 ++; <N ) [F 1 << A] = 0 ; 用(INT S = 0 ; S <(1 << N); S ++ ) のための(INT A = 1 ; <S; ++ ) 場合((S | A)== S) [s]とF分(F = [S]、[A] + F [A ^ S] +(和[A] ^和[A ^ F S]))。 用(INT S = 0 ; S <(1個の << N); S ++ ) のために(INT A =(S- 1)&S; =(A- 1)&S) F [S] =分(F [S]、[A] + F F [A ^ S] +(和[ A] ^和[A ^ S]))。 COUT << [(F 1 << N) - 1 ] << ENDL。 }
今日のトピックは、ゲーム理論[DPのあるNIMのゲーム:ゲーム理論のDPの80%が最終的にNIMゲームアップに変換されると言われて]
実際には、運動のこのタイプは、アリスとボブにのみ関連(霧
このことは、おそらくこれです
ゲームgがあり、アリスとボブは、それはノーネクタイ、条件の結果というのターンベースのゲームであるヴァンの2人です。人は失う操作することができないとき
以下に説明するために多くの、多くの疑問があります
T1
、整数S(2 <= S <= 200)、上側のハンドマイナスSの数値xを有し、少なくとも1、しかしS.未満であります 双方は正の整数を引くSへの交代が、k倍にお互いを失う前のラウンドの数を超えることはできません後、当事者が0勝に減少しました。彼は、上の手が勝つかどうかを尋ねましたか?
溶液:
ある状態から別の状態、および状態への状態が発生した勝利を失われます
F [S] S->偽報告しなければならないのs>真の勝利
S-によって州> s1.s2.s3 ......
任意のF [SI] =真のための場合は、状態を獲得することです。
ダイレクトメモリ検索!
DP [I] [j]は、残りの現在の数を表し、iは、番号が状態jにまで低減され、DP [I] [J] = = 1それ以外失う勝ちます
DP [I]、[J] - > DP [IX] [Xの*のK](1 <= xで<= j)は
いくつかのxについて、DP [IX] [Xの*のK] = = 0の場合、DP [I] [J] = 1、そうでない場合はDP [I] [J] = 0の場合
DPのための要件[S] [S-1]
O(S ^ 3)
F [i] [j]は、相手が番号j、彼は状態を勝ち負けされ、この時間[状態]擬似コード低減され、私を残しました
書式#include <iostreamの> 使用して名前空間はstdを、BOOL F [] []、G [] []。BOOL DFS(int型、IをINT J) { 場合(I == 0)を返す偽。 もし(G [I] [J])戻り[I] [J] F。 G [i] [j]は = 真、[I] [j]は= F 偽。 用(INT R = 1 ; R <= I && R <= k個* jを; R ++ ) 場合(DFS(IR、R)== 偽)[i] [j]は= F 真。 リターン } [I] [J] F; int型のmain() { CIN >> S >> K。 用(INT A = 1 ++; <S ) であれば(DFS(SA、A)== 偽) { COUT << " アリス" << ENDL。 リターン 0 ; } COUT << " ボブ" << ENDL。 リターン 0 ; }
T2
n個のゲームが存在する場合
SG定義関数:なし状態の関数の最小数はSGに転送することができます
SG [0] = 0
SGの定理:
各ゲームSGのためのn個のSG値= XOR値アップ
T3
今、あなただけ離れて1-4の石を取ることができれば
同じ操作:SG [0] = 0 SG [1] = 1、SG [2] = 2 SG [3] = 3 SG [4] = 4 SG [5] = 0
T4
積み上げた石のn + 1、そこに石2012の左端の山は、二人が動作しています。オペレータは、石を増加または減少させることによって異なるヒープ杭を選択します(マイナス1プラス1、または残された石プラスヒープが許可されていない持っている)ことができます。ゲームは有限数のステップで終了することを確実にするためには、山の右側で選択した山の規定はない方法を失っていない石の奇数を含んでいなければならない。上位の手が勝つかどうかを尋ねましたか?
0かどうかを確認するためにNパリティ計算スタック、すべての奇数の添字排他的または取り出したスタック石、
そこ概念としての石の山があるとそうでありません
石の奇妙なヒープを変換することによって、問題を解決するために
0とみなさ左端の杭ヒープは、奇数番号のXOR一緒に石の石杭の数が、結果は0が勝つ他の優勢を失う、またはあります
実際には、ゲームはNIMに変換され、
T5
U N N階段上に重ね石、階段数0..N-1が、各スタックは、[N]石を有しています。彼らは石の任意のヒープが、その下の階段の飛行上の任意の番号に移動するたびに、再生するためにターンを取る、石の数0が移動することはできません。すべての石が0番に移動されるまで、その人が勝ちます。ただ、必勝法があるかどうかを尋ねます。
グリッドの作品の奇数番号の末尾からXORまでのステップ数が答えです
T6
グリッドから選択された各々が標識されていない者が操作した後、3つの連続したグリッドがあるがマークされている場合u1xN(1 <= N <= 2000)サブ空間、ひいては操作の両方が、それは、マークされていますその後、彼が勝つと、上の手が勝つ戦略を持っているかどうかを尋ねたのでしょうか?
よりゲームとしてのゲーム
複数のゲームに細分
水平バーSGの長さのためにSG [i]は、数であり、I
クロスボーダー防ぐ:ライン上の配列に加えて、十分に大きな番号の後ろ
書式#include <iostreamの> の#include <アルゴリズム> 書式#include <ベクトル> 使用して名前空間はstdを、INT DFS(INT N) { 場合(N == 0)戻り0 ; もし(F [N])戻りSG [n]は、 F [N] = 真。 ベクター < INT > Z。 用(INT A = 1 ; <= N; ++ ) { int型 L = MAX(A- 3、0 ); int型 R = MAX(NA- 2、0 ); z.push_back(DFS(L) ^ DFS(登録商標)); } ソート(z.begin()、z.end())。 z.push_back(233333333 )。 用(INT A = 0、P = 0 ;; ++ ) { 場合(Z [P] =!A) { SG [n]は = 。 戻りSG [n]は、 } 一方(Z [P] == A) のp ++ 。 } } int型)(主 { cinを >> N; もし(DFS(N))COUT << " アリス" << ENDL。 他の裁判所未満<< " ボブ" << てendl; }
練習を残します:
bzoj2798
7日目中豪西
消防署の確立
Dpが練習していません
N <= 100000
F [i]は[0/1] [K]
自分自身では、父親、兄弟、祖父ノードをカバーすることができます
(明らかに最高4つのノードを置きます)
最初のツリーは、最も深いノードの深さを知る自分の祖父を見つけるために、祖父は木同様の操作の残りのため、その上のノードを削除するには、彼の祖父をカバーするために、接合部で兵士を入れて、ツリーはすべて覆われるまで
ヒープ上のメンテナンス、Oの時間複雑度(N Nログ)
n個のk個の係数を求めます
M ^ k個の缶の再計算
人々は番号が付けられている場合は、異なるグループが行う求めて?
各グループn / R個体、プログラムの数
だから、多くの場合、および簡素化
変換を計算するためにオイラーの定理を使用した後
1e9-401は素数であり、そして1e9-402 = 2 * 13 * 5281 * 7283
%21352817283の階乗n個みよう
再結合
%数が少ないので、サイクルが表示されたセクションがあるでしょう
F [i] [j]は離れステップを表して私は、jは来ます
ポイントのN番号、少し右
彼らは三角形を形成することができるように、m回は、P1、P2は、この経路上の三点を見つける2点たびに尋ねあります
M、N <= 1E6
フィボナッチ数
2点間の距離が42より大きい場合、出力はい
以下、暴力可能であれば
bzoj木の三角形