UVa

UVa-1203, POJ-2051, ZOJ-2212, LiveArchive-3135, TJU-1093 : Argus

問題概要 (A[i]*k, B[i])(k in [1,inf) i in [1..N( 解法 優先順位付きキューから取り出しては時間を進めて再び突っ込んでいく。

POJ-1930, UVa-10555, SPOJ-DEADFR, TJU-1430, ZOJ-1933 : Dead Fraction

問題概要 循環小数が与えられる。ただし循環の単位は分からない。分母が最小になるように有理数で表す問題。 解法 反復単位がどうなってるか全探索する。制約がよく分からなかったので多倍長で。

POJ-1486, LiveArchive-5634, UVa-663, ZOJ-1197, TJU-1611 : Sorting Slides

問題概要 片方のサイズ26以下の二部グラフが与えられる。完全マッチングを作るときに一位に定まるものを出力する問題。 解法 全てのペアに対して、一度固定してから残りを使って完全マッチングができるかどうかを判定すればよい。二部マッチングは差分のみ計…

UVa-11517 : Exact Change

UVa

問題概要 コインがN( 解法 (何枚目まで見た、いくら)を組にして必要な最小枚数でDP。よくある01ナップザック。

POJ-1150, UVa-10212 : The Last Non-zero Digit

問題概要 Permutation(N, M)の末尾の0を取り除いたとき最下位の桁の数がいくつになるか求める問題。N 解法 2と5を分けて考えれば単なるmod 10での計算になる。2と5を全て取り除いた上での積を計算しておけばいいのだが、累積積とかを計算しようとするとMLEす…

UVa-10667 : Largest Block

UVa

問題概要 W*W(W 解法 もっとも愚直にやるとW^4。両端を固定して考えるとW^3で、通すだけならこれで十分。実はW^2で解くことができる。各行について蟻本p280の問題に落とせばよい。

UVa-10130 : SuperSale

UVa

問題概要 ナップザック。

POJ-1065, ZOJ-1025, LiveArchive-2322, TJU-1469 : Wooden Sticks

問題概要 数字のペアの列(長さN 解説 某所で日本語解説を見てしまっていたので殆ど自分で考えずに解いてしまった。 Dilworthの定理より、最小パス被覆を求める代わりに最大反鎖のサイズを求める。これはペアをソートした後第二要素の最長狭義減少列を求めれ…

UVa-348, LiveArchive-5456, TJU-2118, ZOJ-1276 : Optimal Array Multiplication Sequence

UVa

問題概要 いわゆる連鎖行列積。復元もあり。 解法 [from, to)型のDPの典型例。

POJ-1011, LiveArchive-5522, UVa-307, SPOJ-STIJ, TJU-1009 : Sticks

問題概要 ある数aがb個ある。それぞれの数を分割する作業を繰り替えした結果が与えられる。aとして考えられる最小値を求める問題。 解法 探索で頑張る。 長い順に調べた方が枝刈りしやすそうであることは直感的に分かる。 最初は、長い順に元はどの木片であ…

POJ-1017, LiveArchive-5526, UVa-311, TJU-1022, ZOJ-1307 : Packets

問題概要 1*1, 2*2, ..., 6*6の板を6*6マスの盤に埋め込む。盤は最小いくつ必要か求める問題。 解法 だいたい直感通りに貪欲に詰めていく。こういうのは場合分けを減らしたいんだけど難しい。

UVa-882, POJ-2904 : The Mailbox Manufacturers Problem

問題概要 K個のポストがある。ポストを壊すのに爆弾が最低いくつ必要かをしりたい。最低爆弾をいくつ用意する必要があるか求める問題。 解法 状態を(残りポスト、下限、上限)としてDP。

UVa-10626 : Buying Coke

UVa

問題概要 8円のコーラをN( 解法 動的計画法。dp[i本買った][残り1円][残り5円][残り10円]=最小枚数とすると状態数が多くてTLEしそう。残り硬貨の枚数を全部覚えておく必要はなくて、2種類について枚数が分かれば残りの枚数は引き算で求められる。これで状態…

UVa-10496, TJU-2696, POJ-2907 : Collecting Beepers

問題概要 N

UVa-10401 : Injured Queen Problem

UVa

問題概要 キング+上下に動くようなクイーンに対して、Nクイーンが何通りあるか求める問題。いくつかのクイーンは配置が指定されている。 解法 ごくごく素直なDPだとO(N^3)。?のとき全部に配るのを止めて、全体に配って近くだけ差っ引くというやりかたをすれ…

UVa-111 : History Grading

UVa

問題概要 LIS。N 解法 練習のつもりでO(N*log N)解を書く。入力の変換が最も面倒。

UVa-11159 : Factors and Multiples

UVa

問題概要 整数の集合A,B(濃度はいずれも100以下)がある。A、Bからいくつかの要素を除いて、Bの任意の要素がAのどの要素の倍数にもなっていないようにしたい。最小でいくつ取り除く必要があるか求める問題。 解法 二部グラフを構成すると、求めるものは最小点…

UVa-10037, ZOJ-1877, POJ-2573, TJU-1353 : Bridge

問題概要 人がN( 考えたこと 速い順にソートする。1番速い人と2番目に速い人の位置とライトの位置とそれ以外の人が何人残っているか、という4つの組を状態としてメモ化再帰する。3番目以降の人の動かし方は、遅い方から動かしていけば良い。

UVa-10911 : Forming Quiz Teams

UVa

問題概要 ノード数N( 解法 ICPCの国内予選に出たAnd Then. How Many Are There?に似てる。ビットDPするだけ。

UVa-10453 : Make Palindrome

UVa

問題概要 長さL( 解法 strとrev(str)のLCSを計算する。LCSに含まれない部分だけを追加すればよい。LCSの復元の方法はちゃんと文字が一致するかどうか確かめないと駄目。

UVa-562, LiveArchive-5583 : Dividing coins

UVa

問題概要 N( 解法 部分和問題のNが大きい番。半分全列挙は使えないが、値が小さいのでDPで作ることのできる部分和を全て求める。

UVa-10635 : Prince and Princess

UVa

問題概要 長さL(最長共通部分列を求める問題。 解法 片方の数列に現れる順序で数字に番号を振りなおして、もう片方の数列で最長増加部分列を求めればよい。

UVa-10313 : Pay the Price

UVa

問題概要 N

UVa-11953 : Battleships

UVa

問題概要 4近傍でflood fillして池の数を数える問題。

UVa-11832 : Account Book

UVa

問題概要 長さN(sign[i]*A[i] = Fとなるような符号の付け方に関して、一意に定まるものは正か負かを、定まらないものはその旨出力する。どうやってもできないときはその旨出力する。 解法 今いくつの数字を持っているかをキーにしてDP。詳細はコード参照。 …

UVa-10827 : Maximum sum on a torus

UVa

問題概要 N*N(N 解法 前処理で累積和を持っておいて全探索する。トーラス云々は4倍にしたテーブルの上でやっておけば特に意識せずに処理できる。計算量はO(N^4)で危ないがそんなに複雑な処理をしてるわけではないので何とか間に合う。

UVa-10616 : Divisible Group Sums

UVa

問題概要 長さN( 解法 余りの値といくつ使ったかを見ながらDP。オーバーフローや、値の重複に注意すること。

UVa-590 : Always on the run

UVa

問題概要 都市がN( 解法 (i日目、どの都市にいるか)を状態のキーにしてDPするだけ。

UVa-103 : Stacking Boxes

UVa

問題概要 D(入れ子にして最大いくつ詰めることができるか求める問題。どの順に積めるかも出力する。 解法 ソートして順序を適切に定めた上でLIS。

UVa-10891 : Game of Sum

UVa

問題概要 長さN( 解法 連続する区間を残すので[from, to)型のDP。 入力がファイル読み込みって書いてあったけど実際は標準入力からの読み込みだった。