// https://oj.uz/problem/view/NOI19_feast
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
using LL=long long;
using LD=long double;
#define FOR(i,l,r) for(auto i=(l);i<=(r);++i)
#define ROF(i,l,r) for(auto i=(l);i>=(r);--i)
#define REP(i,n) FOR(i,0,(n)-1)
#define ITF(e,c) for(auto&e:(c))
#define ssize(x) int(x.size())
#ifdef DEBUG
auto operator<<(auto&o,auto p)->decltype(p.first,o){return o<<'('<<p.first<<", "<<p.second<<')';}
auto operator<<(auto&o,auto&x)->decltype(x.end(),o){o<<'{';int i=0;for(auto e:x)o<<(", ")+2*!i++<<e;return o<<'}';}
#define debug(x...) cerr<<"["#x"]: ",[](auto...$){((cerr<<$<<"; "),...);}(x),cerr<<'\n'
#else
#define debug(...) {}
#endif
int N,K;
vector<int> A;
int main() {
cin.tie(0)->sync_with_stdio(0);
/// input
{
cin >> N >> K;
A.resize(N);
ITF(e,A) cin >> e;
}
/// brute
vector<vector<vector<LL>>> dp(N,vector<vector<LL>>(K+1,vector<LL>(2,0)));
{
dp[0][1][1] = A[0];
FOR(i,1,N-1) {
FOR(k,1,K) {
dp[i][k][0] = max(dp[i-1][k][0], dp[i-1][k][1]);
dp[i][k][1] = max(dp[i-1][k-1][0], dp[i-1][k][1]) + A[i];
}
}
}
/// output
{
cout << max(dp[N-1][K][0],dp[N-1][K][1]) << endl;
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |