Submission #1004225

#TimeUsernameProblemLanguageResultExecution timeMemory
1004225HasanV11010238Kitchen (BOI19_kitchen)C++17
0 / 100
66 ms163668 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define INF 10000000 int main(){ ll n, m, k, su = 0; cin>>n>>m>>k; bool ca = 0; if (m < k){ ca = 1; } vector<ll> a(n + 1), b(m + 1); for (int i = 0; i< n; i++){ cin>>a[i + 1]; su += a[i + 1]; if (a[i + 1] < k){ ca = 1; } } for (int i = 0; i < m; i++){ cin>>b[i + 1]; } if (ca){ cout<<"Impossible"; return 0; } vector<vector<vector<ll>>> dp(m + 1, vector<vector<ll>>(m + 1, vector<ll>(k * n + 1, 0))); for (int i = 1; i <= m; i++){ for (int j = 1; j <= i; j++){ for (ll l = i * k; l <= k * n; l++){ if (a[j] >= k){ dp[i][j][l] = max(dp[i - 1][j - 1][max(l - k, 0ll)] + a[j] - min(l, k), dp[i - 1][j][l]); } else{ dp[i][j][l] = max(dp[i - 1][j - 1][min(l - a[j], 0ll)], dp[i - 1][j][l]); } } } } ll ans = m + 1; for (ll i = k; i <= m; i++){ ll val = max(ans, dp[m][i][k * n]); if (val >= su - k * i){ ans = min(ans, i); } } if (ans == m + 1){ cout<<"Impossible"; return 0; } cout<<ans; }
#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...