题目
解法
C++
#include<bits/stdc++.h>
using namespace std;
map<int,int>colormap;
map<int ,int >::iterator it;
//最多50中不同的颜色
int color[100];
int need[10];
bool dfs(int i,int n,int m){
if(i == m)return true;
for(int j = 0;j<n;j++){
if(color[j] >= need[i]){
color[j] -= need[i];
if(dfs(i+1,n,m))return true;
color[j] +=need[i];
}
}
return false;
}
int main(){
int n,m;
cin>>n>>m;
int t;
for(int i = 0;i < n;i++){
cin>>t;
colormap[t]+=1;
}
t=0;
it=colormap.begin();
while (it != colormap.end()) {
color[t++]=it->second;
it++;
}
//存储need数组
for(int i = 0;i < m;i++){
cin>>need[i];
}
//a表示color数组的情况
cout<<boolalpha<<dfs(0,t,m);
return 0;
}