滚动数组
查看原帖
滚动数组
766675
da_ke楼主2024/12/2 20:06

萌新不太会滚动数组,只写了 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();
}
2024/12/2 20:06
加载中...