SRM 585 DIV1 Easy - TrafficCongestion (復習×○)

問題


http://community.topcoder.com/stat?c=problem_statement&pm=11361&rd=15697

2分木の高さが与えられる。
車は一筆書きでそのセルを移動することができる。
ただし、一度車が通った道は行くことができない。

このとき、すべてのセルを移動するのに必要な車の台数を求める。

解き方


いくつか例を並べてみると、前の高さで必要な車の数+2つ前で必要な車の数×2が答えになるという法則が出てくる。
あとはこれをdpで実装すればよい。


Challenge
高さが0のときはセルが1個存在するので答えは1になる。
値が0、1のときにコードがそのままでよいのか、例外条件を書かなければいけないのかを確かめる。
特にこの問題の場合は2つ前の配列を調べることからスタートは2からになるので
特に注意する。

dpの配列の宣言がなぜかうまく通らなかったのですが、vectorで宣言するとうまくいきました。10^6を超えるなど大きい場合のときはvectorを用いるのがよさそうです。

コード


class TrafficCongestion {

public: int theMinCars(int treeHeight) {
vector<long long> dp(treeHeight+1,0);
long long MOD=1000000007;

dp[0]=1,dp[1]=1;
FORE(i,2,treeHeight+1)dp[i]=(dp[i-1]+2*dp[i-2])%MOD;

return (int)dp[treeHeight];
}

};
このエントリーをはてなブックマークに追加