Submission #1359028

#TimeUsernameProblemLanguageResultExecution timeMemory
1359028yusuf12360Potatoes and fertilizers (LMIO19_bulves)C++20
0 / 100
1094 ms1372 KiB
#include<bits/stdc++.h>
#define int long long
#define ld long double
#define pii pair<int, int>
#define vi vector<int>
#define vvi vector<vi> 
#define pb push_back
#define fi first
#define se second
#define TII tuple<int, int, int>
#define MT make_tuple
#define mp make_pair
#define ts to_string
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
#define MIN(x) *min_element(all(x))
#define MAX(x) *max_element(all(x))
#define lb lower_bound
#define ub upper_bound
#pragma GCC optimize("O3", "unroll-loops")
using namespace std;
const int INF = 1e15, ADD = 3e4 + 1, MX = 6e4 + 5, N = 3'005;
int dp[2][MX];
void cmin(int &a, int b) { a = min(a, b); }
int32_t main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    int n; cin >> n;
    for(int i = 0; i < 2; i++) for(int j = 0; j < MX; j++) dp[i][j] = INF;
    dp[0][ADD] = 0;

    // dp_idx = real_idx + ADD
    // real_idx = dp_idx - ADD
    for(int i = 1; i <= n; i++) {
        int a, b; cin >> a >> b;

        int cur = (i & 1), prv = (cur ^ 1);
        for(int j = -ADD; j <= ADD; j++) dp[cur][j + ADD] = INF;

        if(a < b) {
            for(int j = -ADD; j <= ADD; j++) {
                if(j + (b - a) <= ADD) cmin(dp[cur][j + ADD], dp[prv][j + (b - a) + ADD] + abs(j + (b - a)));
            }
        } else {
            for(int j = -ADD; j <= ADD; j++) {
                for(int k = 0; k <= a - b; k++) {
                    if(j - k >= -ADD) cmin(dp[cur][j + ADD], dp[prv][j - k + ADD] + abs(j - k));
                }
            }
        }

        // cout << "________" << endl;
        // for(int j = -ADD; j <= ADD; j++) {
        //     if(abs(j) <= 3) cout << j << " : " << dp[cur][j + ADD] << endl;
        // }
    }
    cout << dp[n & 1][ADD] << '\n';
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...