萌新不太会滚动数组,只写了 50pts 的暴力 dp:
#include <bits/stdc++.h>
#define i64 long long
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
#define fdn(i,r,l) for(int i=(r);i>=(l);i--)
#define pii pair<int,int>
using namespace std;
typedef long long ll;
typedef double db;
typedef __int128 i128;
std::mt19937 rnd(std::chrono::steady_clock::now().time_since_epoch().count());
std::mt19937_64 rnd64(std::chrono::steady_clock::now().time_since_epoch().count());
const int N=1e5+23;
string dp[N]={"-1","-1","1","7","4","2","6","8"};
int cost[10]={6,2,5,5,4,5,6,3,7,6};
bool cmp(string a,string b)
{
if(a.size()!=b.size()) return a.size()<b.size();
else return a<b;
}
void solve()
{
int n;
cin>>n;
if(n<=7){cout<<dp[n]<<endl;return ;}
rep(i,8,n)
{
dp[i]="ccf";
rep(d,0,9)
if(dp[i-cost[d]][0]!='-')
{
if(dp[i]=="ccf") dp[i]=dp[i-cost[d]]+(char)(d+'0');
else if(cmp(dp[i-cost[d]]+(char)(d+'0'),dp[i]))
dp[i]=dp[i-cost[d]]+(char)(d+'0');
}
}
cout<<dp[n]<<endl;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
#endif
ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
int T;
cin>>T;
while(T--) solve();
}