Submission #839220

#TimeUsernameProblemLanguageResultExecution timeMemory
839220teo_thrashKas (COCI17_kas)C++14
10 / 100
130 ms3436 KiB
#include<bits/stdc++.h> #define pb push_back using namespace std; typedef long long ll; typedef pair<int, int> pii; const int maxn=1e5+10; const int mod=1e9+7; int n; ll a[503]; ll dp[maxn], sum=0; ///dp[i] is the max sum of the subsequences that when split optimally, the 2 parts differ by i ll otgore[maxn], otdolu[maxn], smqna[maxn]; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>n; for(int i=0; i<n; i++){ cin>>a[i]; sum+=a[i]; } sort(a, a+n, greater<int>() ); dp[a[0]]=a[0]; otgore[a[0]]=otdolu[a[0]]=smqna[a[0]]=a[0]; for(int i=1; i<n; i++){ dp[a[i]]=max(dp[a[i]], a[i]); for(int j=0; j<=sum-a[i]; j++){ if(dp[j+a[i]]!=0){ otgore[j]=dp[j+a[i]]+a[i]; } } for(int j=a[i]; j<=sum; j++){ if(dp[j-a[i]]!=0){ otdolu[j]=dp[j-a[i]]+a[i]; } } for(int j=1; j<a[i]; j++){ if(dp[j]!=0){ smqna[a[i]-j]=dp[j]+a[i]; } } for(int j=0; j<=sum; j++){ dp[j]=max(dp[j], max(otgore[j], max(otdolu[j], smqna[j]))); otgore[j]=otdolu[j]=smqna[j]=-1; } } cout<<sum - dp[0]/2<<endl; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...