답안 #320450

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
320450 2020-11-08T19:27:45 Z Marlov Kitchen (BOI19_kitchen) C++14
30 / 100
99 ms 111460 KB
/*
Code by @marlov       
*/
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <utility>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <queue>
#include <iterator>
using namespace std;
typedef long long ll;
typedef pair<int,int> pi;
 
#define maxV 305
#define INF 1000000000
 
int N,M,K;
int A[maxV];
int B[maxV];
int dp[maxV][maxV*maxV];
int mina=maxV;
int At=0;
int Bt=0;
int result=INF;
//dp values and value after chef i works on it
int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin>>N>>M>>K;
	for(int i=0;i<maxV;i++){
		fill(dp[i],dp[i]+(maxV*maxV),-1);
	}
	for(int i=1;i<=N;i++){
		cin>>A[i];
		mina=min(mina,A[i]);
		At+=A[i];
	}
	if(mina<K){
		cout<<"Impossible"<<'\n';
		return 0;
	}
	for(int i=1;i<=M;i++){
		cin>>B[i];
		Bt+=B[i];
	}
	dp[0][0]=0;
	for(int i=1;i<=M;i++){
		//possibly forgetting to propigate last values
		for(int j=0;j<B[i];j++){
			dp[i][j]=dp[i-1][j];
			//cout<<i<<" "<<j<<" : "<<dp[i][j]<<'\n';
		}
		for(int j=B[i];j<=Bt;j++){
			dp[i][j]=max(dp[i-1][j],dp[i-1][j-B[i]]+min(B[i],N));
			//cout<<i<<" "<<j<<" : "<<dp[i][j]<<'\n';
		}
	}
	for(int i=0;i<=Bt;i++){
		if(dp[M][i]>=N*K&&i>=At){
			result=min(result,i-At);
		}
	}

	if(result==INF){
		cout<<"Impossible"<<'\n';
		return 0;
	}else{
		cout<<result<<'\n';
	}

    return 0;
}
 
/* stuff you should look for
	* int overflow, array bounds
	* special cases (n=1,n=0?)
	* do smth instead of nothing and stay organized
*/
# 결과 실행 시간 메모리 Grader output
1 Correct 65 ms 111336 KB Output is correct
2 Correct 67 ms 111460 KB Output is correct
3 Correct 66 ms 111332 KB Output is correct
4 Correct 73 ms 111460 KB Output is correct
5 Correct 65 ms 111332 KB Output is correct
6 Correct 70 ms 111332 KB Output is correct
7 Correct 66 ms 111332 KB Output is correct
8 Correct 67 ms 111332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 65 ms 111336 KB Output is correct
2 Correct 67 ms 111460 KB Output is correct
3 Correct 66 ms 111332 KB Output is correct
4 Correct 73 ms 111460 KB Output is correct
5 Correct 65 ms 111332 KB Output is correct
6 Correct 70 ms 111332 KB Output is correct
7 Correct 66 ms 111332 KB Output is correct
8 Correct 67 ms 111332 KB Output is correct
9 Correct 78 ms 111328 KB Output is correct
10 Correct 67 ms 111332 KB Output is correct
11 Correct 67 ms 111352 KB Output is correct
12 Correct 67 ms 111332 KB Output is correct
13 Incorrect 67 ms 111460 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 99 ms 111460 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 77 ms 111336 KB Output is correct
2 Correct 67 ms 111332 KB Output is correct
3 Correct 67 ms 111332 KB Output is correct
4 Correct 69 ms 111332 KB Output is correct
5 Correct 68 ms 111460 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 65 ms 111336 KB Output is correct
2 Correct 67 ms 111460 KB Output is correct
3 Correct 66 ms 111332 KB Output is correct
4 Correct 73 ms 111460 KB Output is correct
5 Correct 65 ms 111332 KB Output is correct
6 Correct 70 ms 111332 KB Output is correct
7 Correct 66 ms 111332 KB Output is correct
8 Correct 67 ms 111332 KB Output is correct
9 Correct 78 ms 111328 KB Output is correct
10 Correct 67 ms 111332 KB Output is correct
11 Correct 67 ms 111352 KB Output is correct
12 Correct 67 ms 111332 KB Output is correct
13 Incorrect 67 ms 111460 KB Output isn't correct