제출 #1209513

#제출 시각아이디문제언어결과실행 시간메모리
1209513Theo830Kitchen (BOI19_kitchen)C++20
20 / 100
146 ms195248 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll INF = 1e9+7; const ll MOD = 998244353; typedef pair<ll,ll> ii; #define iii pair<ll,ii> #define f(i,a,b) for(ll i = a;i < b;i++) #define pb push_back #define vll vector<ll> #define F first #define S second #define all(x) (x).begin(), (x).end() ///I hope I will get uprating and don't make mistakes ///I will never stop programming ///sqrt(-1) Love C++ ///Please don't hack me ///@TheofanisOrfanou Theo830 ///Think different approaches (bs,dp,greedy,graphs,shortest paths,mst) ///Stay Calm ///Look for special cases ///Beware of overflow and array bounds ///Think the problem backwards ///Training int main(void){ ll n,m,k; cin>>n>>m>>k; ll a[n]; ll ans = 1e18; ll cur = 0; f(i,0,n){ cin>>a[i]; cur += a[i]; if(a[i] < k){ cout<<"Impossibe\n"; return 0; } } ll b[m]; ll sum = 0; f(i,0,m){ cin>>b[i]; sum += b[i]; } ll dp[m+1][sum+1]; f(i,0,m+1){ f(j,1,sum+1){ dp[i][j] = -1e18; } } dp[0][0] = 0; f(i,0,m){ f(j,0,sum+1){ dp[i+1][j] = dp[i][j]; } f(j,0,sum+1){ if(j + b[i] <= sum){ dp[i+1][j + b[i]] = max(dp[i+1][j + b[i]],dp[i][j] + min(n,b[i])); } } } f(j,cur,sum+1){ if(dp[m][j] >= n * k){ cout<<j - cur<<"\n"; return 0; } } cout<<"Impossible\n"; }
#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...