91分求助!!!
查看原帖
91分求助!!!
470966
Ding_wd_Peter146_楼主2023/7/13 11:46
# include <bits/stdc++.h>
using namespace std;

const int MAXN = 1000010;
string ss;
long long a[MAXN] , c[100][100] , f[100][MAXN];

int main()
{
	cin >> ss;
	long long l = ss.size();
	for (long long i = 0; i < l; i++)
		a[i + 1] = ss[i] - int('0');
	
	for (long long i = 1; i <= l; i++)
	{
		c[i][i] = a[i];
		for (long long j = i; j-i <= 11 && j <= l; j++)
			c[i][j] = c[i][j-1] * 10 + a[j];
	}
	long long n;
	cin >> n;
	for (long long i = 0 ; i <= l + 1 ; i ++)
		for (long long j = 0 ; j <= n + 1 ; j ++)
			f[i][j] = 0x3f;
	f[0][0] = 0;
	for (long long i = 1; i <= l; i ++)
	{
		for(long long j = 1; j <= 11 && i + j <= l + 3; j++)
		{
			if (i >= j)
			{
				for (long long k = c[i-j+1][i]; k <= n ; k++)
					f[i][k] = min(f[i][k], f[i - j][k - c[i-j+1][i]] + 1);
			}	
		}
	}
	if (n == 0) cout << 0;
	else if (f[l][n] > l) cout << -1;
	else cout << f[l][n] - 1;
	return 0;
}
2023/7/13 11:46
加载中...