제출 #1311763

#제출 시각아이디문제언어결과실행 시간메모리
1311763hyyhKitchen (BOI19_kitchen)C++20
100 / 100
64 ms111476 KiB
#include <iostream>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <iomanip>
#include <set>
#include <bitset>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
using pibii = tuple<int,bool,int,int>;
#define endl '\n'
#define f first
#define s second

int const N = 305;

int dp[N][N*N];

int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    memset(dp, -1,sizeof dp);
    int n,m,k;cin >> n >> m >> k;
    vector<int> stuf(n);
    int tneed = 0;
    int kneed = n*k;
    for(auto &i:stuf){
        cin >> i;
        tneed += i;
        if(i < k){
            cout << "Impossible";
            return 0;
        }
    }
    int sum = 0;
    dp[0][0] = 0;
    for(int i = 1;i <= m;i++){
        int g;cin >> g;
        int mt = min(g,n);
        sum += g;
        for(int j = 0;j <= sum;j++){
            if(dp[i-1][j] != -1) dp[i][j] = dp[i-1][j];
            if(j >= g && dp[i-1][j-g] != -1) dp[i][j] = max(dp[i][j],dp[i-1][j-g]+mt);
            //cout << dp[i][j] << " ";
        }
        //cout << endl;
    }
    int ans = 1e9+7;
    for(int j = tneed;j <= sum;j++){
        if(dp[m][j] >= kneed) ans = min(j-tneed,ans);
    }
    if(ans == 1e9+7){
        cout << "Impossible";
    }
    else 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...