Submission #167791

# Submission time Handle Problem Language Result Execution time Memory
167791 2019-12-10T06:45:40 Z egekabas Kas (COCI17_kas) C++14
100 / 100
833 ms 392696 KB
#include <bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long   ll;
typedef unsigned long long   ull;
typedef long double ld;
typedef pair<ll, ll>    pll;
typedef pair<ull, ull>    pull;
typedef pair<int, int>  pii;
typedef pair<ld, ld>  pld;
ll n;
ll a[509];
ll dp[509][100009];
ll tot;
ll f(ll x, ll y){
    if(y > 100000)
        return 1e18;
    if(dp[x][y] != -1)
        return dp[x][y];
    if(x == 0){
        if(y == 0)
            return dp[x][y] = a[x];
        else if(y == a[x])
            return dp[x][y] = 0;
        else
            return dp[x][y] = 1e18;
    }
    dp[x][y] = min(f(x-1, y)+a[x], f(x-1, abs(y-a[x])));
    dp[x][y] = min(dp[x][y], f(x-1, abs(y+a[x])));
    return dp[x][y];
}


int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    
    cin >> n;
    for(ll i = 0; i < n; ++i){
        cin >> a[i];
        tot += a[i];
    }
    for(ll i = 0; i <= 500; ++i)
        for(ll j = 0; j <= 100000; ++j)
            dp[i][j] = -1;
    ll left = f(n-1, 0);
    cout << left+(tot-left)/2 << "\n";
}
# Verdict Execution time Memory Grader output
1 Correct 312 ms 392564 KB Output is correct
2 Correct 308 ms 392568 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 313 ms 392544 KB Output is correct
2 Correct 326 ms 392568 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 312 ms 392568 KB Output is correct
2 Correct 316 ms 392620 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 313 ms 392568 KB Output is correct
2 Correct 311 ms 392620 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 312 ms 392528 KB Output is correct
2 Correct 314 ms 392568 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 314 ms 392568 KB Output is correct
2 Correct 309 ms 392568 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 311 ms 392532 KB Output is correct
2 Correct 311 ms 392528 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 461 ms 392636 KB Output is correct
2 Correct 361 ms 392696 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 436 ms 392604 KB Output is correct
2 Correct 646 ms 392696 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 833 ms 392620 KB Output is correct
2 Correct 831 ms 392696 KB Output is correct