제출 #591007

#제출 시각아이디문제언어결과실행 시간메모리
591007nguyen31hoang08minh2003Holding (COCI20_holding)C++14
88 / 110
58 ms118868 KiB
#include <bits/stdc++.h> #define fore(i, a, b) for (signed i = (a), i##_last = (b); i < i##_last; ++i) #define fort(i, a, b) for (signed i = (a), i##_last = (b); i <= i##_last; ++i) #define ford(i, a, b) for (signed i = (a), i##_last = (b); i >= i##_last; --i) #define fi first #define se second #define pb push_back #define sz(x) ((int)(x).size()) #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() using namespace std; using ll = long long; using ld = long double; template<class A, class B> bool maxi(A &a, const B &b) {return (a < b) ? (a = b, true):false;}; template<class A, class B> bool mini(A &a, const B &b) {return (a > b) ? (a = b, true):false;}; typedef unsigned long long ull; typedef pair<int, int> ii; typedef vector<ll> vi; typedef vector<ii> vii; typedef vector<vi> vvi; typedef vector<vii> vvii; const int maxN = 55, maxK = 10005, inf = 0x3f3f3f3f; int n, l, r, k, a[maxN], dp[maxN][maxN][maxK]; int DP(int x, int y, int z) { if (x == l) return DP(r + 1, y, z); if (y > r) return 0; if (dp[x][y][z] < 0) { const int d = abs(x - y); dp[x][y][z] = inf; mini(dp[x][y][z], a[y] + DP(x, y + 1, z)); if (x <= n) { mini(dp[x][y][z], DP(x + 1, y, z)); if (d <= z) mini(dp[x][y][z], DP(x + 1, y + 1, z - d) + a[x]); } } return dp[x][y][z]; } void subtask3() { memset(dp, -1, sizeof(dp)); cout << DP(1, l, k) << '\n'; } void subtask4() { cout << 0 << '\n'; } void input() { cin >> n >> l >> r >> k; fort(i, 1, n) cin >> a[i]; } int main() { #ifdef LOCAL freopen("input.INP", "r", stdin); #endif // LOCAL cin.tie(0) -> sync_with_stdio(0); cout.tie(0); input(); if (n <= 50) subtask3(); else subtask4(); 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...