AtCoder, 分枝限定法, 深さ優先探索

問題方針

整数計画法である 0-1 ナップサック問題を線形計画法で解くことを考えます。線形計画法では、重さ当たりの価値が大きいものから取っていけば良いです。ここで、荷物を重さ当たりの価値の降順になるように並び替えます。

深さ ...

AtCoder, ビット全探索, 二分探索, 分枝限定法, 半分全列挙

問題方針半分全列挙

\( n = \min(20, N) \) として、問題を \( n \) と \( N – n \) 個に分けて考えます。前半の問題の集合を \( A \) とし、後半を \( B \) とします。\( ...

AtCoder, 幅優先探索

問題方針

文字列 ‘a’ のマスのリストを \( a \) とし、マス ‘S’ からマス \( p \) の最短距離を \( d(p) \) とします。探索は迷路で使われるような幅優先探索 ...

AtCoder, 動的計画法

問題方針

\( d(i, j, k) \) を金貨が \( i \) 枚、銀貨が \( j\) 枚、銅貨が \( k \) 枚であるときの確率とします。初期値は、\( d(A, B, C) = 1 \) で、その他は \( 0 \) で ...

AtCoder, 数学

問題方針

\( (r_1, c_1)\) から \(( r_2, c_2) \) への移動は、\( x = |r_2 – r_1| \)、\( y = |c_2 – c_1| \) として、\( (0, 0)\) ...

AtCoder, 桁DP

問題方針

桁 DP を用いて考えます。\( d(i, j, k) \) を \( i \) 桁目まで調べた時、\( 1 \) の数が \( j \) であり、未満フラグが \( k \) であるものの数とします。\( k = 0 \) ...

AtCoder, データ構造, 文字列

問題方針

括弧の対応の問題で良く使うスタックを使います。スタックに \( s \) の先頭から入れていき、\( s_i = o \) のとき、スタックの先頭から “xf” と積まれていたら “fox& ...

AtCoder, 数学

問題方針

\( xy = P\) となるような \( x, y \) を全探索します。このとき、探索は \( x \) についてだけでよく、\( 1 \leq x \leq \sqrt{P} \) の範囲で十分です。

コード

AtCoder, ビット全探索

問題方針

問題を解く順番は関係ないので、コンプリートする問題を全探索します。これは、ビット全探索で解くことはできます。コンプリートした問題の集合を \( 2 \) 進数で表し、点数が \( G \) 未満ならば、コンプリートしていない問 ...

yukicoder, 数え上げ

問題方針

\( x^2 + y^2 \) の頻度をあらかじめ計算しておき、\( z^2 – w^2 + D \) が存在するかを調べます。また、定数倍高速化をすることで、\( N^3 \) のコードもギリギリ通りました。