dp零分求调
查看原帖
dp零分求调
799373
diva233楼主2024/11/3 14:47
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N=1e5;
int t,n;
int dp[N];

int len(int num){
	int cnt=0;
	while(num!=0){
		num/=10;
		cnt++;
	}
	int ans=1;
	for(int i=1;i<=cnt;i++){
		ans*=10;
	}
	return ans;
}

signed main(){
	cin >>t;
	dp[1]=0xfff,dp[2]=1,dp[3]=7,dp[4]=4,dp[5]=2,dp[6]=6,dp[7]=8;
	while(t--){
		cin >>n;
		if(dp[n]==0){
			for(int i=8;i<=n;i++){
				for(int j=1;j<=7;j++){
					dp[i]=min({dp[i-j]*len(dp[j])+dp[j],dp[j]*len(dp[i-j])+dp[i-j],dp[i-6]*10});
				}
			}
			cout <<dp[n]<<endl;
		}
		else if(n==1) cout <<-1<<endl;
		else cout <<dp[n]<<endl;
	}
	return 0;
}
2024/11/3 14:47
加载中...