Submission #1270707

#TimeUsernameProblemLanguageResultExecution timeMemory
1270707abcdxyzFeast (NOI19_feast)C++20
22 / 100
31 ms4988 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define ull unsigned long long #define pii pair<int, int> #define pll pair<long long, long long> #define fi first #define se second #define ALL(x) (x).begin(), (x).end() #define MASK(x) ((1LL) << (x)) #define BIT(x, i) (((x) >> (i)) & (1LL)) #define eb emplace_back #define pb push_back #define endl '\n' int dx[4] = {-1, 0, 0, 1}; int dy[4] = {0, -1, 1, 0}; const int nmax = 3e5+5; const int MOD = 1e9 + 7; const int INF = 1e9 + 7; const int base = 31; ll powmod(ll a, ll b) { if(b==1) return a; if(b==0) return 1; ll res=powmod(a,b/2); res=res*res%MOD; if(b%2) res=res*a%MOD; return res; } ll divide(ll a, ll b) { return a * powmod(b, MOD - 2) % MOD; } ll pre[nmax]; ll a[nmax]; int n , k; namespace sub1{ bool check(){ int cnt=0; for (int i= 1;i <=n;i++) if(a[i] < 0) cnt++; return cnt <=1; } void solve(){ ll sum1=0,sum2=0; bool ok = false; for (int i= 1;i <=n;i++){ if(a[i] < 0){ ok=true; } if(!ok && a[i] > 0) sum1+=a[i]; else if ( ok && a[i] > 0 ) sum2+=a[i]; } if(k==1) cout << max(sum1,sum2); else cout << sum1 + sum2; return; } } namespace sub2{ bool check(){ return k==1; } void solve(){ ll res=0; ll mx=0; for (int i= 1;i <=n;i++){ mx=max(mx+ a[i] , a[i]); res=max(res,mx); } cout << res; return; } } namespace sub3 { bool check(){ return n <= 2000; } void solve(){ // sort(a+1, a+1+n); for (int i=1;i<=n;i++) pre[i] = pre[i-1] + a[i]; vector<vector<ll>> dp(n+1 , vector<ll>(k+1, -INF)); for (int i=0;i<=n;i++) dp[i][0] = 0; ll res=0; for (int i=1;i<=n;i++){ for (int j=1;j<=k;j++){ // dp[i][j] = dp[i-1][j]; for (int t=0;t<i;t++){ dp[i][j] = max(dp[i][j], dp[t][j-1] + pre[i] - pre[t]); } res=max(res,dp[i][j]); } } cout << res; return; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> k; for (int i= 1;i <=n;i++) cin >> a[i]; for (int i= 1;i <=n;i++){ pre[i]=pre[i-1] + a[i]; } if(sub1::check()){ sub1::solve(); return 0; } if(sub2::check()){ sub2::solve(); return 0; } if(sub3::check()){ sub3::solve(); return 0; } return 0; }
#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...