凭借记忆,回想起了这道题。其实很简单,没做出来确实很遗憾很遗憾。特别是dfs还刚刚看过,就没想到。真的饮恨,遗憾遗憾遗憾!
1.给定一个数,还有一些数字,求由这些数字组成的不大于这个数的最大数值。
这个题还是很简单的,dfs就可以解。没写出来,太不应该。
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 20
int store[MAXN];
int min_num = -1;
int tmp = 0;
void dfs(int* store,int k,int n,int like,int shuzi_count){ //长度为n的数
if(k == n+1){
if(tmp<like && tmp>min_num){
min_num = tmp;
}
}else{
for(int i=0;i<shuzi_count;i++){
tmp *= 10;
tmp += store[i];
dfs(store,k+1,n,like,shuzi_count);
tmp -= store[i];
tmp /= 10;
}
}
}
int main(){
int group;
cin>>group; //组数
int like;
int weishu;
int shuzi_count;
while(group--){
cin>>like;
cin>>weishu>>shuzi_count;
for(int i=0;i<shuzi_count;i++){
cin>>store[i];
}
dfs(store,1,weishu,like,shuzi_count);
cout<<min_num<<endl;
}
return 0;
}