PKU 3176 Cow Bowling

  • 動的計画法
  • 左上と右上の値のうち大きい方を伝搬していく
int main() {
	int N;
	cin >> N;
	int dp[2][512];
	memset(dp, 0, sizeof(dp));

	int front = 1;
	int back = 0;
	int bestAnswer = INT_MIN;
	for (int row = 1; row <= N; ++row) {
		for (int column = 1; column <= row; ++column) {
			int value;
			cin >> value;
			dp[front][column] = value + max(dp[back][column - 1], dp[back][column]);
			bestAnswer = max(bestAnswer, dp[front][column]);
		}
		swap(front, back);
	}

	cout << bestAnswer << endl;
}