不可能吧,时间复杂度是tn,最大也才5*10^6,为啥会超时?
#include<bits/stdc++.h>
using namespace std;
unsigned long long t,n,a[10]={6,2,5,5,4,5,6,3,7,6};
string dp[100001];
string mins(string a,string b)
{
if(a.length()>b.length())
return b;
if(a.length()<b.length())
return a;
if(a>b)
return b;
else
return a;
}
int main()
{
cin>>t;
dp[1]="0";
dp[2]="1";
dp[3]="7";
dp[4]="4";
dp[5]="2";
dp[6]="6";
dp[7]="8";
while(t--)
{
cin>>n;
if(n==1)
{
cout<<-1<<endl;
continue;
}
for(int i=8;i<=n;i++)
{
for(int j=0;j<=9;j++)
{
char c=j+'0';
string s1;
s1+=c;
if(dp[i]=="")
{
dp[i]=dp[i-a[j]]+s1;
}
else
{
if(i-a[j]>1)
{
string s=dp[i-a[j]]+s1;
dp[i]=mins(dp[i],s);
}
}
}
}
cout<<dp[n]<<endl;
}
}
就是酱