50pts,MLE,求调
查看原帖
50pts,MLE,求调
909190
Wangzijia2011楼主2024/10/27 21:18
#include<bits/stdc++.h>
using namespace std;
int sticks_needed[10] = {6,2,5,5,4,5,6,3,7,6};
int main() {
    int T;
    cin >> T;
    vector<int> test_cases(T);
    int max_n = 0;
    for (int i = 0; i < T; ++i) {
        cin >> test_cases[i];
        max_n = max(max_n, test_cases[i]);
    }
    vector<string> dp(max_n + 1, "");
    dp[0] = "";
    for (int n = 1; n <= max_n; ++n) {
        for (int d = 0; d <= 9; ++d) {
            int s = sticks_needed[d];
            if (n >= s && dp[n - s] != "-") {
                if (dp[n - s] == "" && d == 0) continue;
                string candidate = dp[n - s] + char('0' + d);
                if (candidate[0] == '0') continue;
                if (dp[n] == "" || candidate.length() < dp[n].length() || 
                    (candidate.length() == dp[n].length() && candidate < dp[n])) {
                    dp[n] = candidate;
                }
            }
        }
        if (dp[n] == "") dp[n] = "-";
    }
    for (int i = 0; i < T; ++i) {
        if (dp[test_cases[i]] == "-") cout << -1 << endl;
		else cout << dp[test_cases[i]] << endl;
    }
    return 0;
}

2024/10/27 21:18
加载中...