Submission #197115

#TimeUsernameProblemLanguageResultExecution timeMemory
197115nicolaalexandraKitchen (BOI19_kitchen)C++14
100 / 100
54 ms1144 KiB
#include <bits/stdc++.h> #define DIM 310 #define INF 2000000000 using namespace std; int a[DIM],b[DIM],dp[2][DIM*DIM]; int n,m,k,i,j,sum_a,sum_b,t,ok; int main (){ cin>>n>>m>>k; for (i=1;i<=n;i++){ cin>>a[i]; if (a[i] < k) ok = 1; sum_a += a[i]; } for (i=1;i<=m;i++){ cin>>b[i]; sum_b += b[i]; } if (ok || sum_b < sum_a){ cout<<"Impossible"; return 0; } sort (b+1,b+m+1); /// trb sa am minim k bucatari diferiti pt fiecare masa /// dp[i][j] - nr maxim de zone pe care pot sa le acopar cu primii i bucatari si in total sa platesc j for (j=0;j<=sum_b;j++) dp[0][j] = -INF; dp[0][0] = 0; t = 1; for (i=1;i<=m;i++){ for (j=0;j<=sum_b;j++) dp[t][j] = -INF; for (j=0;j<=sum_b;j++){ if (j < b[i]){ dp[t][j] = dp[1-t][j]; continue; } if (dp[1-t][j-b[i]] != -INF) dp[t][j] = max (dp[1-t][j],dp[1-t][j-b[i]] + min(n,b[i])); else dp[t][j] = dp[1-t][j]; } t = 1-t; } for (j=sum_a;j<=sum_b;j++){ if (dp[1-t][j] >= n*k){ cout<<j-sum_a; return 0; } } cout<<"Impossible"; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...