解いた問題

7/27/2013

SRM585 Div1 Easy

250
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 件のコメント :

コメントを投稿