86求调
查看原帖
86求调
758820
Porridge_Dust楼主2023/10/19 07:46

WA #3 #10

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

const int N = 6e5 + 100, L = 50;

string str;
int n, st[L][L], ans = 40, l;
int f[L][N];

int main ()
{
    cin >> str >> n;

    if (n == 0) {cout << 1 << endl; return 0;}

    l = str.length();
    for (int i = l; i >= 1; i -- ) str[i] = str[i - 1];

    for (int len = 1; len <= 6; len ++ )
        for (int i = 1; i <= l - len + 1; i ++ )
        {
            int num = 0;
            for (int j = 1; j <= len; j ++ )
                num = num * 10 + str[i + j - 1] - '0';
            st[i][i + len - 1] = num;
        }

    memset (f, 0x3f, sizeof f);
    f[0][0] = 0;
    for (int i = 1; i <= l; i ++ )
        for (int k = 0; k <= i - 1; k ++ )
            for (int j = st[k + 1][i]; j <= n; j ++ )
                    f[i][j] = min(f[k][j - st[k + 1][i]] + 1, f[i][j]);

    if (f[l][n] == 0x3f3f3f3f) cout << -1 << endl;
    else cout << f[l][n] - 1 << endl;

    return 0;
}
2023/10/19 07:46
加载中...