Submission #1310026

#TimeUsernameProblemLanguageResultExecution timeMemory
1310026hyyhKas (COCI17_kas)C++20
100 / 100
62 ms1984 KiB
#include <iostream>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <iomanip>
#include <set>
#include <bitset>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
#define endl '\n'
#define f first
#define s second

int dp[2][200010];

int main(){
    memset(dp,-1,sizeof dp);
    int n;cin >> n;
    int sums = 0;
    vector<int> a;
    for(int i = 0;i < n;i++){
        int g;cin >> g;
        sums += g;
        a.emplace_back(g);
    }
    // for(auto k:a) cout << k << " ";
    // cout << endl;
    int sum = a[0];
    dp[0][0] = 0;
    dp[0][a[0]] = a[0];
    for(int i = 1;i < n;i++){
        sum += a[i];
        for(int j = 0;j <= sum;j++){
            if(dp[abs((i-1)%2)][abs(j-a[i])] != -1) dp[i%2][j] = max(dp[abs((i-1)%2)][abs(j-a[i])]+a[i],dp[i%2][j]);
            if(dp[abs((i-1)%2)][j] != -1) dp[i%2][j] = max(dp[i%2][j],dp[abs((i-1)%2)][j]);
            if(dp[abs((i-1)%2)][j+a[i]] != -1) dp[i%2][j] = max(dp[i%2][j],dp[abs((i-1)%2)][j+a[i]]+a[i]);
            //cout << dp[i%2][j] << " ";
        }
        //cout << endl;
    }
    cout << sums-(dp[(n-1)%2][0]/2);
}
#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...