解いた問題のソースコードと解説など。


2013-02-01から1ヶ月間の記事一覧

POJ 3230 Travel

問題文DP強化週間。街がN個あり、すべての街の間を移動するのに必要な交通費の情報が与えられる。またi日目にjの街にいたときにもらえる金額の情報が与えられる。M回移動するとしたときに得られる最大の金額を求めよ。という問題。dp[j][i]:=(i回移動した後…

POJ 3186 Treats for the Cows

問題文DP強化週間。配列が与えられ、毎ターン配列の先頭か最後尾から数字を取り出せる。Tターン目に取り出した数字がaだとすると得点T * a が得られる。全ての数字を取り出したときの最大の得点を求める問題。下の図のように dp[i][j]:=(配列の左からi個、右…

POJ 2184 Cow Exhibition

問題文DP強化週間。整数の数列SとFが与えられる。S+Fの部分和の最大値を計算する。しかしそのときのSの部分和、Fの部分和ともに0以上でなくてはならない。という問題。dp[i+1][j]:=(数列のi番目まででSの部分和がjである時のFの部分和の最大値)でDP。メモリ…

POJ 1543 Perfect Cubes

問題文となる自然数の組をa 単純に探索すればいい。TLEが怖かったのでなるべく外側ループで探索を少なくした。 int main(int argc, char **argv){ int n; scanf("%d", &n); for(int d = 2; d <= n; d++){ for(int a = 2; a < n; a++){ if(a > d) continue; f…

POJ 2287 Tian Ji -- The Horse Racing

問題文長さnの数列が2つ与えられる(a,bとする)。この2つの数列の数字同士を全てカップリングさせてaの方の数字が大きれば+200点。bの方が大きければ-200点。得点を最大化せよ、という問題。DP強化週間のつもりが貪欲。=の時をうまく扱えずに人の答えを見て…

POJ 3356 AGTC

問題文DP強化週間。文字列が2つ与えられる。それらの文字列の適切な位置に文字を挟む、消去する、文字を変えるなどして、2つの文字列を同じにしたい。そのために必要な処理の回数を求める問題。要は編集距離。 dp[i+1][j+1]:=(文字列1のi番目と文字列2のj番…

POJ 2181 Jumping Cows

問題文長さPの数列が与えられて偶数秒にはその数列から数字を選んで足す、奇数秒には選んで引く。これを0秒から始める。i+1秒で選ぶ数字はi秒で選んだ数字より数列中で後のものでなくてはならない。最大和を求めよ、という問題。DP強化週間のつもりが、たん…

POJ 2081 Recaman's Sequence

問題文DP強化週間。問題概要は簡単なので略。問題も小さい方からメモ化して計算していくだけ。 以下ソース。 int a[500001]; int main(int argc, char **argv){ a[0] = 0; set<int> rec; for(int i = 1; i <= 500000; i++){ int t = a[i - 1] - i; int u = a[i - </int>…

POJ 2250 Compromise

問題文DP強化週間。2つのテキストが与えられる。LCSを求めよ。という問題。LCS長のdp表をジグザグと左上に進んでいき、その添字i,jのときに2つに単語s[i],t[j]が等しければ出力。そうでなければdp長が短くなる方向に移動。 こちらを参考にさせていただいた。…

POJ 2392 Space Elevator

問題文DP強化週間。K種類のブロックがある。種類iのブロックは高さhi、個数ci個ある。 そして様々なブロックを下から積み上げて行った時、この種類のブロックは 必ずai以下に置かれていなくてはならない。積み上げることのできるブロックの 最長の長さを答え…

Get up! 明日のSUPER ST@R!