MLE50,MLE on #4,5,7,8,10
代码:
#include<bits/stdc++.h>
#define I using
#define AK namespace
#define IOI std
#define i_ak return
#define ioi 0
I AK IOI;
int t,n,a[]={6,2,5,4,3,7};
string dp[100005]={"-1"},b[10];
string check(string a,string b){
if(a=="-1"&&b=="-1")return "-1";
else if(a=="-1")return b;
else if(b=="-1")return a;
else{
int len1=a.size(),len2=b.size();
if(len1==len2){
if(a>b)return b;
return a;
}
else{
if(len1>len2)return b;
return a;
}
}
}
int main(){
//freopen("","r",stdin);
//freopen("","w",stdout);
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++)dp[i]="-1";
dp[2]="1";
dp[6]="6";
dp[5]="2";
dp[4]="4";
dp[3]="7";
dp[7]="8";
b[2]="1";
b[6]="0";
b[5]="2";
b[4]="4";
b[3]="7";
b[7]="8";
for(int i=1;i<=n;i++){
for(int j=0;j<=5;j++){
if(i>=a[j]&&dp[i-a[j]]!="-1")dp[i]=check(dp[i],dp[i-a[j]]+b[a[j]]);
}
}
cout<<dp[n]<<endl;
}
i_ak ioi;
}