PKU 1163 The Triangle
- 動的計画法
- 直前のマスの最適解を用いて現在のマスの最適解を求める
int main() { int N; cin >> N; int first; cin >> first; vector<int> dp; dp.push_back(first); int bestAnswer = INT_MIN; for (int n = 2; n <= N; ++n) { vector<int> next; for (int i = 0; i < n; ++i) { int value; cin >> value; int sum = INT_MIN; if (i) { sum = max(sum, value + dp[i - 1]); } if (i < n - 1) { sum = max(sum, value + dp[i]); } next.push_back(sum); bestAnswer = max(bestAnswer, sum); } swap(dp, next); } cout << bestAnswer << endl; }