답안 #539030

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
539030 2022-03-18T09:58:28 Z _karan_gandhi Feast (NOI19_feast) C++17
43 / 100
1000 ms 25940 KB
#include <bits/stdc++.h>
using namespace std;

#define all(v) v.begin(), v.end()
#define endl '\n'
#define pl(var) " [" << #var << ": " << (var) << "] "
#define ll long long

void solve() {
	// dp[i][j] = the max sum that can be obtained if j subsegments are chosen and last subsegment ends at i

	// dp[i][j] = dp[0..i][j-1]
	int n, k; cin >> n >> k;
	vector<ll int> arr(n); for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}

	bool good = 1;
	bool one = 0;
	for (int i = 0; i < n; i++) {
		if (arr[i] < 0 && !one) {
			good = 0;
			one = 1;
		} else if (arr[i] < 0 && one) {
			one = 0;
			break;
		}
	}

	if (good) {
		ll int cur = 0;
		for (int i = 0; i < n; i++) {
			cur += arr[i];
		}

		cout << cur << endl;
		return;
	}

	if (one) {
		// depends on the value of k;
		ll int start = 0;
		ll int end = 0;
		ll int all = 0;
		bool instart = 1;

		for (int i = 0; i < n; i++) {
			if (arr[i] < 0) {
				instart = 0;
				continue;
			}

			if (instart) {
				start += arr[i];
			} else {
				end += arr[i];
			}
			all += arr[i];
		}

		if (k == 1) {
			cout << max({start, end, all}) << endl;
		} else {
			cout << start + end << endl;
		}

		return;
	}

	vector<vector<ll int>> dp(n + 1, vector<ll int>(k + 1, 0));

	ll int ans = 0;
	ll int mn = 0;
	ll int pref = 0;
	for (int i = 0; i < n; i++) {
		pref += arr[i];
		mn = min(pref, mn);
		dp[i][1] = max(pref - mn, pref);
		ans = max(ans, dp[i][1]);
		if (arr[i] < 0) good = 0;
	}

	for (int i = 2; i <= k; i++) {
		for (int j = i - 1; j < n; j++) {
			ll int cur = arr[j]; 
			ll int best = arr[j];
			for (int k = j - 1; k >= 0; k--) {
				dp[j][i] = max(dp[k][i - 1] + best, dp[j][i]);
				cur += arr[k];
				best = max(best, cur);
			}
			ans = max(ans, dp[j][i]);
		}
	}

	cout << ans << endl;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int T = 1;
	// cin >> T;
	while (T--)
		solve();
}
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 2516 KB Output is correct
2 Correct 28 ms 2644 KB Output is correct
3 Correct 29 ms 2644 KB Output is correct
4 Correct 28 ms 2644 KB Output is correct
5 Correct 29 ms 2516 KB Output is correct
6 Correct 31 ms 2516 KB Output is correct
7 Correct 35 ms 2516 KB Output is correct
8 Correct 33 ms 2644 KB Output is correct
9 Correct 27 ms 2516 KB Output is correct
10 Correct 27 ms 2516 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 17 ms 2516 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 46 ms 18888 KB Output is correct
2 Correct 51 ms 18528 KB Output is correct
3 Correct 50 ms 18764 KB Output is correct
4 Correct 51 ms 18648 KB Output is correct
5 Correct 53 ms 18756 KB Output is correct
6 Correct 55 ms 18896 KB Output is correct
7 Correct 46 ms 19000 KB Output is correct
8 Correct 47 ms 18824 KB Output is correct
9 Correct 47 ms 19048 KB Output is correct
10 Correct 66 ms 18924 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 296 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 272 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 296 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 272 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 3 ms 428 KB Output is correct
12 Correct 4 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 3 ms 340 KB Output is correct
15 Correct 2 ms 284 KB Output is correct
16 Correct 3 ms 340 KB Output is correct
17 Correct 4 ms 340 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 2 ms 340 KB Output is correct
20 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 296 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 272 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 3 ms 428 KB Output is correct
12 Correct 4 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 3 ms 340 KB Output is correct
15 Correct 2 ms 284 KB Output is correct
16 Correct 3 ms 340 KB Output is correct
17 Correct 4 ms 340 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 2 ms 340 KB Output is correct
20 Correct 1 ms 340 KB Output is correct
21 Correct 642 ms 3432 KB Output is correct
22 Execution timed out 1093 ms 25940 KB Time limit exceeded
23 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 2516 KB Output is correct
2 Correct 28 ms 2644 KB Output is correct
3 Correct 29 ms 2644 KB Output is correct
4 Correct 28 ms 2644 KB Output is correct
5 Correct 29 ms 2516 KB Output is correct
6 Correct 31 ms 2516 KB Output is correct
7 Correct 35 ms 2516 KB Output is correct
8 Correct 33 ms 2644 KB Output is correct
9 Correct 27 ms 2516 KB Output is correct
10 Correct 27 ms 2516 KB Output is correct
11 Incorrect 17 ms 2516 KB Output isn't correct
12 Halted 0 ms 0 KB -