约定是假的吧
查看原帖
约定是假的吧
1407005
butanlianai楼主2024/10/27 08:47

不是说前两个点n不超过50吗?为啥我的码一个点都没过,c不会是鬼故事吧,我比赛时就是这样编的

#include<bits/stdc++.h>
using namespace std;
long long t,n,a[10]={6,2,5,5,4,5,6,3,7,6};
long long dp[100001];
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;
		}
		if(n==6)
		{
			cout<<0<<endl;
			continue; 
		}
		for(int i=8;i<=n;i++)
		{
			for(int j=0;j<=9;j++)
			{
				if(dp[i]==0)
				{
					dp[i]=dp[i-a[j]]*10+j;
				}
				else
				{
					if(i-a[j]>1)
					{
						dp[i]=min(dp[i],dp[i-a[j]]*10+j);
					}
				}
			}
		}
		cout<<dp[n]<<endl;
	}
} 
2024/10/27 08:47
加载中...