考场代码 90pts 求优化
查看原帖
考场代码 90pts 求优化
639198
Steve_xh楼主2024/11/7 12:48

dp

#include<bits/stdc++.h>
// #define int long long
using namespace std;
// typedef long long ll;
// const int MAXN=100005,mod=998244353,inf=0x3f3f3f3f;
int T,n,last=1;
const int cst[]={6,2,5,5,4,5,6,3,7,6};
const char tonum[]={'0','1','2','3','4','5','6','7','8','9'};
string f[200005];
void subtaskA(){
    while(n){
        cout<<8;
        n-=7;
    }
    cout<<'\n';
}
void subtaskB(){
    if(n==1){
        cout<<"-1\n";
        return ;
    }
    cout<<10;
    n-=8;
    subtaskA();
}
string mins(string x,string y){
    if(x==""||x[0]=='-')
        return y;
    if(y==""||y[0]=='-')
        return x;
    if(x.size()!=y.size()){
        if(x.size()<y.size())
            return x;
        else
            return y;
    }
    return min(x,y);
}
void solve(){
    cin>>n;
    if(n%7==0)
        return subtaskA();
    if((n-1)%7==0)
        return subtaskB();
    for(int i=last;i<=n;i++){
        if(f[i]=="")
            continue;
        for(int j=0;j<10;j++){
            f[i+cst[j]]=mins(f[i+cst[j]],f[i]+tonum[j]);
            if(j)
                f[i+cst[j]]=mins(f[i+cst[j]],tonum[j]+f[i]);
        }
    }
    last=n+1;
    if(f[n]=="")
        cout<<"-1\n";
    else
        cout<<f[n]<<'\n';
}
signed main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    f[2]="1",f[3]="7",f[4]="4",f[5]="2",f[6]="6",f[7]="8";
    cin>>T;
    while(T--)
        solve();
    return 0;
}
2024/11/7 12:48
加载中...