AOJ 2642 - 夕食
解法
日間で、日目に自炊を行ったと仮定します。
このとき、得られる幸福度は以下のようになります。
はじめの2つの項が食堂で食べることによって得られる幸福度、最後のΣの部分が自炊によって得られる幸福度になります。
これを式変形するとこうなります。
これを整えると、以下のようになります。
よって、自炊を行った日数を決め打ちしたときの幸福度の最大値は、を最小にしたときになります。
この値は、の選び方に依存しますが、を昇順にソートし、小さい順に選んでいけばよいです。
あとは、自炊を行った日数を全探索し、幸福度の最大値を求めれば答えとなります。
感想
とりあえず条件を立式して考える、できたとしても上手く答えにたどり着くかどうか微妙なところですね…
みんなのプロコン2019 D - Ears
解法
適当に実験をすると、散歩後の石の個数は、座標が小さい順に、次のような区間でわけることができます。
ただし、それぞれの区間の幅が0の可能性もあります。
ということで、今現在どの区間にいるか、という情報を持たせつつDPを行います。上の5つのパターンに、上から0,1,2,3,4と番号を割り振ります。
番目の耳まで見て、そこがパターンだったときの、操作の最小値
とすると、
番目の耳がパターンだった際にかかる操作回数
を用いて、
と計算することができます。
は、
パターン0,4:
パターン1,3:が奇数なら1,0なら2,偶数なら0
パターン2:が奇数なら0,偶数なら1
と計算することができるので、あとはDPの遷移を行うと、を求めることで答えとなります。
感想
当時は解けなかったので、成長を感じますね...
AOJ 1619 - 弁当作り
解法
制約にと書いてあります。これがすべてです。
が大きいパターンとが大きいパターンで場合分けをします。
なので、実はが、簡単にビットで情報を持つことができます。
が小さいパターン
全探索をします。
それぞれの材料について、その材料を必要としているレシピの集合を前計算で求めておきます。
そして、今回作成するレシピの集合について、先ほどの前計算したものとそれぞれ積集合を計算し、その結果含まれる要素の個数が全て偶数であれば、のレシピの集合を一度に作成することができます。こののうち、要素数が最大のものを求めればよいです。が小さいパターン
bitDPをします。
番目までのレシピを作成し終えて、材料の余りがになるようなレシピの作成方法のうち、作成したレシピの個数の最大値
とすると、番目のレシピを作成した際に使用する材料の集合をとして前計算しておくことで、
という遷移で計算することができます。
はとのxorをとればよいです。
こうすると、が答えになります。
あとは、この計算を繰り返せば答えが求まります。
感想
制約によって場合分けをする発想が無かったので解けませんでした…(それぞれについては、この制約ならいけるのになぁみたいな感じでなんとなくは考えていました)。
COLOCON -Colopl programming contest 2018- C - すぬけそだて――ごはん――
解法
あらかじめ、ある数とが同時に存在しうるか、を調べておきます。
使用できる数を、前半の20個と、残りの2つの部分に分け、それぞれに処理をしていきます。
最終的には、前半の状態を1つ決めた時の、後半の場合の数を高速に計算して、前半の状態を全探索します。
後半部分について、前計算で以下のようなDPを行います。
後半の数から選んだ集合の中でのカードの選び方
を、に含まれる最大の数とします。を、の中で、と同時に選べる数の集合とします。すると、
というようにして計算を行っていくことができます。
あとは、前半部分の集合を1つ決めたときに、その集合に対して使用できる後半部分の集合を計算し、その集合に対応するDPの配列を参照して足していくことで、答えを求めることができます。
最初に計算した同時に存在しうるかどうか、の情報をlong long型の変数で持っておくと、その後の計算が楽かつ高速に行えるので、この問題に答えることができます。
感想
模擬国内Eの復習をサボっていたら同じような問題にあたってしまいました…
と思っていたのですが、bitDPなり全探索なりでもいけるみたいですね!
AOJ 2200 - Mr. リトー郵便局
解法
まずは、陸路と海路それぞれについて、ワーシャルフロイド法を用いて、任意の町間の最短距離を計算しておきます。町から町の最短経路について、陸路を、海路をとします。
そして、DPを行います。
回目の集配を終えた時点で、船が町にあるような経路の中で、時間が最短のもの
とします。そして、回目の集配を陸路のみで行うか、海路も含めて行うかの2パターンに分けて計算します。
初期値は、となります。
陸路のみを利用する場合
回目の集配を終えても、その前後で船の位置は移動しません。ので、
となります。海路も利用する場合
町から町まで海路を利用したとします。すると、
が今回かかる時間なので、
となります。
あとは、このDPを行い、の最小値を求めれば答えとなります。