[AOJ] No. 0595 部活のスケジュール表 (Schedule)
前日と今日のスケジュールの状態を考えれば良いので、動的計画法を行います。便宜上、与えられた文字列の先頭に ‘J’ を挿入します。ここで、\( d(i, j) \) を \( i \) 日目の参加者の状態 ...
[AOJ] No. 0644 水ようかん (Mizuyokan)
水ようかんを切り分けた時の長さの値は、切る箇所を任意の \( 2 \) 点選ぶことを考えると、最大でも
\
あることが分かります。したがって、最小値を固定したときの、最大値を変数とみて、最大 ...
[AOJ] No. 0611 シルクロード (Silk Road)
都市 \( i \ (1 \leq i \leq N)\) に到達して滞在する可能性のある日 \( j \) の範囲は、\( i \leq j \leq M – N + i\) となります。ここで、次の配列を考えま ...
[AtCoder] Educational DP Contest E – Knapsack 2
商品の重さの最大値が \( 10^9\) なので、添え字で重さを管理して考えるのはメモリ的にきついので、別の方法を考えます。価値を添え字で管理することを考えます。\( d(i, j)\) を商品 \( i \) まで調べたとき ...
[AtCoder] Educational DP Contest D – Knapsack 1
いわゆるナップザック問題ですね。
\( d(i, j) \) を品物 \( i \) まで調べたとき、重さの総和が \( j \) であるときの価値の総和の最大値とします。初期値は、\( d(0, 0) = 0 \ ...
[AtCoder] Educational DP Contest C – Vacation
前日とは同じ行動を取ることができないことに注意して考えます。\( i \) 日目に行動 \( j = \{A, B, C\}\) を取った時の最大値を \( d(i, j) \) とします。このときの遷移式は、
[AtCoder] ABC 142 E – Get Everything
鍵 \( i \) は \( b_i\) 種類の宝箱を開けることができるので、鍵は鍵束であると見ることができます。全ての宝箱を開けられないときは、全ての鍵の集合に対して対応できない宝箱があるということなので、先にそれのチェ ...
[AtCoder] AGC 037 A – Dividing a String
下記の方針は間違いを含んでいるので追記を見てください。
文字列 \( S \) の部分文字列に、それぞれの隣接する部分文字列が異なるように分割したときの最大値を求めます。このとき、部分文字列は最長でも \( 2 \ ...
[AtCoder] ABC 135 D – Digits Parade
\( d(i, j) \) を \( i \) 桁目までの調べた時、余りが \( j \) となるものの個数とします。初期値として、\( d(0, 0) = 1 \) とします。
\( S_i = ?\) のと ...
[AtCoder] ABC 134 E – Sequence Decomposing
\( A_1 \geq A_2 \geq \cdots \geq A_i \) となるような広義単調減少列に対して、\( i \) 個の色が必要であることが分かります。これは、連続しない部分列に対しても言える ...