http://community.topcoder.com/stat?c=problem_statement&pm=11361
ある頂点とその直接の子2つを移動する様な選び方が最適なはず。つまり、頂点3個毎を1塊。
木の頂点を高さごとに分けて考えたとして、根とその直接の親の部分のコストを付け足す様な DP になる。
class TrafficCongestion { public: int theMinCars(int treeHeight) { const lli mod = 1000000007; const int N = 1000000 + 10; static lli p2[N]; p2[0] = 1; for (int i = 1; i < N; ++i) { p2[i] = p2[i - 1] * 2; p2[i] %= mod; } static lli dp[N]; dp[0] = 1; dp[1] = 1; for (int i = 2; i < N; ++i) { dp[i] = (dp[i - 2] + p2[i - 1]) % mod; } return dp[treeHeight]; } };
0 件のコメント :
コメントを投稿