#include<bits/stdc++.h>
using namespace std;
int cnt[10]={0,2,5,5,4,5,6,3,7,6};
int dp[10007];
int vis[17];
int main(){
int n,m;
scanf("%d%d",&n,&m);
memset(dp,-1,sizeof(dp));
dp[0]=0;
while(m--){
int x;
scanf("%d",&x);
vis[x]=1;
for(int i=cnt[x];i<=n;i++)
dp[i]=max(dp[i],dp[i-cnt[x]]+1);//位数越大越好
}
int tmp=n;
while(tmp){
for(int i=9;i;i--){//从后向前枚举使得尽可能大
if(vis[i]&&tmp>=cnt[i]&&dp[tmp-cnt[i]]==dp[tmp]-1){//动态规划转化而来
printf("%d",i);
tmp-=cnt[i];
break;
}
}
}
return 0;
}
转载于:https://www.cnblogs.com/ldudxy/p/10397550.html