Submission #726920

#TimeUsernameProblemLanguageResultExecution timeMemory
726920TimDeeKitchen (BOI19_kitchen)C++17
100 / 100
188 ms3712 KiB
#include <bits/stdc++.h>
using namespace std;

#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC target("avx2,popcnt")

//#define int long long
#define forn(i,n) for(int i=0;i<n;++i)
#define pb push_back
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define f first
#define s second
#define pi pair<int,int>

#define vii(a,n) vector<int>a(n);forn(i,n)cin>>a[i];

const int inf = 1e9;
const int mod = 998244353;

void imp() {
	cout<<"Impossible";
	exit(0);
}
const int S=9e4;
const int M=300;
bitset<S+1> dp[M+1];

void solve() {

	int n,m,k; cin>>n>>m>>k;
	vii(a,n);
	vii(b,m);

	int s=0, s2=0;
	for(auto&x:a) s+=x;
	for(auto&x:b) s2+=x;
	if (s2<s) {
		imp();
	}
	forn(i,n) if (a[i]<k) imp();
	if (m<k) imp();

	dp[0][0]=1;

	sort(all(b));
	for(auto&x:b) {
		if (x<n) {
			for (int i=s2-x; i>=0; --i) {
				int j1=min(i/n,m);
				int j2=min((i+x)/n,m);
				if (dp[j1][i]) dp[j2][i+x]=1;
			}
		} else {
			for (int j=m-1; j>=0; --j) {
				dp[j+1]|=dp[j]<<x;
			}
		}
	}

	for (int i=s; i<=s2; ++i) {
		for (int j=k; j<=m; ++j) {
			if (dp[j][i]) {
				cout<<i-s<<'\n';
				return;
			}
		}
	}
	imp();

}

int32_t main() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	solve();
}
#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...