C - Vacation
キーワード
解説
に対して を次のように定義する。
日目に の活動を選んだときの幸福度の最大値
0 日目(夏休みに入る前)は何もしていないので、 とする。
日目に の活動を選ぶことができるのは、 日目に 以外の二つの場合のいずれか。 は、 日目に 以外の二つの活動を選んだときの幸福度の最大値に、 日目に の活動を選んだときの幸福度を加えたものの最大値。
つまり、次のような漸化式が立てられる。
最終的な答えは、 。
提出コード
int main() {
int n; cin >> n;
vector<vector<int>> DP(n+1, vector<int>(3));
rep(i, 1, n+1) {
int a, b, c; cin >> a >> b >> c;
DP[i][0] = a + max(DP[i-1][1], DP[i-1][2]);
DP[i][1] = b + max(DP[i-1][0], DP[i-1][2]);
DP[i][2] = c + max(DP[i-1][0], DP[i-1][1]);
}
cout << max({DP[n][0], DP[n][1], DP[n][2]}) << endl;
}