結果
| 問題 | No.50 おもちゃ箱 | 
| コンテスト | |
| ユーザー |  btk | 
| 提出日時 | 2015-05-22 12:31:54 | 
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) | 
| 結果 | 
                                WA
                                 
                            (最新) 
                                AC
                                 
                            (最初) | 
| 実行時間 | - | 
| コード長 | 967 bytes | 
| コンパイル時間 | 883 ms | 
| コンパイル使用メモリ | 65,852 KB | 
| 実行使用メモリ | 5,248 KB | 
| 最終ジャッジ日時 | 2024-10-09 16:32:50 | 
| 合計ジャッジ時間 | 2,090 ms | 
| ジャッジサーバーID (参考情報) | judge3 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 4 | 
| other | AC * 36 WA * 2 | 
ソースコード
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int>sorted;
vector<int>work;
vector<int> box,item;
int res=11;
int N,M;
void check(int sz){
	for(auto &it:work){
		sorted.push_back(it);
	}
	sort(sorted.begin(),sorted.end());
	reverse(sorted.begin(),sorted.end());
	bool f=true;
	for(auto i=0;i<sz;i++){
		if(sorted[i]>box[i])f=false;
	}
	if(f)res=sz;
	sorted.clear();
}
void func(int n,int sz){
	if(sz>=res)return;
	if(n==N){
		check(sz);
		return;
	}
	for(int i=0;i<sz;i++){
		work[i]+=item[n];
		func(n+1,sz);
		work[i]-=item[n];
	}
	work.push_back(item[n]);
	func(n+1,sz+1);
	work.pop_back();
}
int main(){
	sorted.reserve(10);
	work.reserve(10);
	cin>>N;
	for	(int i=0;i<N;i++){
		int x;
		cin>>x;
		item.push_back(x);
	}
	cin>>M;
	for	(int i=0;i<M;i++){
		int x;
		cin>>x;
		box.push_back(x);
	}
	sort(box.begin(),box.end());
	reverse(box.begin(),box.end());
	func(0,0);
	if(res>=11)cout<<-1<<endl;
	else cout<<res<<endl;
}
            
            
            
        