80分dp求调,sub1错了1个,sub2错了2个
查看原帖
80分dp求调,sub1错了1个,sub2错了2个
1073342
Genshin_ZFYX楼主2024/7/17 15:02
#include<bits/stdc++.h>
using namespace std;
#define int long long
int dp[45][100005],a[45][45],ans;
signed main() 
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	string s;int len,n,wei;
	cin>>s>>n;
	len=s.size();
	s=" "+s;
	wei=to_string(n).size();
	memset(dp,0x3f,sizeof(dp));
	for(int i=0;i<=len;i++)
		dp[i][0]=0;
	for(int i=1;i<=len;i++)
	for(int j=i;j<=len;j++)
	{
		if(j==i)a[i][j]=s[i]-'0';
		else a[i][j]=a[i][j-1]*10+s[j]-'0';
		if(a[i][j]>1e9)break;
	}
	for(int i=1;i<=len;i++)
		for(int j=1;j<=n;j++)
			for(int k=max((int)1,i-wei);k<=i;k++)
				if(j>=a[k][i]&&a[k][i]<=n)dp[i][j]=min(dp[i][j],dp[k-1][j-a[k][i]]+1);
	if(dp[len][n]<=50)
		cout<<dp[len][n]-1;
	else cout<<"-1";
	return 0;
}
2024/7/17 15:02
加载中...