제출 #1000311

#제출 시각아이디문제언어결과실행 시간메모리
1000311nngan267Feast (NOI19_feast)C++17
71 / 100
1084 ms31260 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define db long double #define ii pair<int, int> #define fi first #define se second const int maxn = 3e5+5; const ll mod = 111539786; const db eps = -1e9; const ll inf = 1e18; int n, k; int a[maxn]; ll dp[2005][2005]; ll s[maxn]; struct sub1{ ll sum = 0; void solve(){ for(int i=1; i<=n; i++){ sum += a[i]; } cout << sum << "\n"; } } s1; struct sub2{ void solve(){ int pos = 0; for(int i=1; i<=n; i++){ if(a[i] < 0) pos = i; } ll sum1 = 0, sum2 = 0; for(int i=1; i<pos; i++){ sum1 += a[i]; } for(int i=pos+1; i<=n; i++){ sum2 += a[i]; } if(k == 1) cout << max({sum1, sum2, sum1+sum2+a[pos]}); else{ cout << sum1 + sum2 << "\n"; } } } s2; struct sub3{ void solve(){ ll min_val = 0; ll ans = 0; for(int i=1; i<=n; i++){ ans = max(ans, s[i] - min_val); min_val = min(min_val, s[i]); } cout << ans << "\n"; } } s3; struct sub4{ void solve(){ for(int i=1; i<=k; i++){ ll max_val = 0; for(int j=1; j<=n; j++){ dp[i][j] = dp[i][j-1]; dp[i][j] = max(dp[i][j], max_val + s[j]); max_val = max(max_val, dp[i-1][j] - s[j]); } } cout << dp[k][n] << "\n"; } } s4; bool checks1(){ int min_val = a[1]; for(int i=2; i<=n; i++){ min_val = min(min_val, a[i]); } return min_val >= 0; } bool checks2(){ int cnt = 0; for(int i=1; i<=n; i++){ if(a[i] < 0) cnt++; } return cnt <= 1; } bool checks3(){ return k == 1; } void solve(){ cin >> n >> k; for(int i=1; i<=n; i++){ cin >> a[i]; s[i] = s[i-1] + a[i]; } if(checks1()) s1.solve(); else if(checks2()) s2.solve(); else if(checks3()) s3.solve(); else s4.solve(); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int test = 1; while(test--){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...