답안 #493120

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
493120 2021-12-10T05:58:33 Z wiwiho Kitchen (BOI19_kitchen) C++14
0 / 100
1000 ms 22020 KB
#include <bits/stdc++.h>
 
#define printv(a, b) {\
    for(auto pv : a) b << pv << " ";\
    b << "\n";\
}
 
using namespace std;
 
typedef long long ll;
 
const ll MAX = INT_MAX;
 
void nosol(){
    cout << "Impossible\n";
    exit(0);
}

#define int ll
 
int n, m, k;
vector<int> a;
vector<int> b;
ll sa = 0;
 
const int SZ = 40;
 
ll calc(int h){
    
    vector<vector<ll>> dp(m + 2, vector<ll>((m + 1) * SZ + 10, -MAX));
    dp[0][0] = 0;
    for(int i = 1; i <= m; i++){
        
        for(int j = i; j >= 0; j--){
            for(int s = j * SZ; s >= 0; s--){
                if(dp[j][s] == -MAX) continue;
                ll tmp = dp[j][s] + min(b[i], h + 1);
                int nxt = j + (b[i] >= h);
                dp[nxt][s + b[i]] = max(dp[nxt][s + b[i]], tmp);
            }
        }
    }
 
    ll ans = MAX;
    for(int i = k; i <= m; i++){
        for(int j = sa; j <= m * SZ; j++){
            if(dp[i][j] >= n * k) ans = min(ans, j - sa);
        }
    }
 
    return ans;
}
 
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cerr.tie(0);
 
    cin >> n >> m >> k;
    a.resize(n + 1);
    b.resize(m + 1);
 
    ll sb = 0;
    for(int i = 1; i <= n; i++) cin >> a[i], sa += a[i];
    for(int i = 1; i <= m; i++) cin >> b[i], sb += b[i];
    sort(a.begin() + 1, a.end(), greater<>());
    sort(b.begin() + 1, b.end(), greater<>());
    
    if(k > m || sa > sb){
        nosol();
    }
 
    for(int i = 1; i <= n; i++) if(a[i] < k) nosol();
 
    ll ans = MAX;
    for(int i = 0; i <= SZ; i++){
        ans = min(ans, calc(i));
    }
    if(ans == MAX){
        assert(false);
        nosol();
    }
    cout << ans << "\n";
 
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 460 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 460 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1078 ms 22020 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 864 KB Output is correct
2 Runtime error 33 ms 948 KB Execution killed with signal 6
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 460 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -