贪心求助
查看原帖
贪心求助
928972
ny_Dacong楼主2024/7/13 14:37
// LUOGU_RID: 165695854
#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long num[15];
bool thing[15],ok = 0;
vector<long long> k,ans;
map<long long,long long> v = {{1,2},{2,5},{3,5},{4,4},{5,5},{6,6},{7,3},{8,7},{9,6}};
void dfs(long long sum,long long now){
	if(sum > n){
		return;
	}
	if(sum == n){
		ok = 1;
		return;
	}
	if(ok){
		return;
	}
	for(long long i = now; i <= m; i++){
		dfs(sum+num[i],i);
		k.push_back(num[i]);
		if(ok){
			return;
		}
		k.pop_back();
	}
}
int main(){
//	freopen("match.in","r",stdin);
//	freopen("match.out","w",stdout);
	scanf("%lld%lld",&n,&m);
	for(long long i = 1; i <= m; i++){
		long long tp;
		scanf("%lld",&tp);
		num[i] = v[tp];
		thing[tp] = 1;
	}
	sort(num+1,num+1+m);
	dfs(0,1);
	sort(k.begin(),k.end());
	for(long long i = 0; i < k.size(); i++){
		for(long long j = 9; j >= 1; j--){
			if(v[j] == k[i] && thing[j]){
				ans.push_back(j);
				break;
			}
		}
	}
	sort(ans.begin(),ans.end(),greater<long long>());
	for(long long i = 0; i < ans.size(); i++){
		printf("%lld",ans[i]);
	}
	return 0;
}

记录

2024/7/13 14:37
加载中...