为啥会tle???
查看原帖
为啥会tle???
1407005
butanlianai楼主2024/11/1 20:10

不可能吧,时间复杂度是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;
	}
} 

就是酱

2024/11/1 20:10
加载中...