蚌埠住了,看了一下午
#include<bits/stdc++.h>
using namespace std;
string s;
int n;
int num[45][45];
int dp[45][100005];//长度为i,和为j所需最少的加号数量
int main(){
//freopen("candy.in","r",stdin);
//freopen("candy.out","w",stdout);
cin>>s;
cin>>n;
s=" "+s;
for(int i=1;i<s.size();i++){
for(int j=i;j<s.size();j++){
num[i][j]=num[i][j]*10+(s[j]-'0');
if(num[i][j]>n){
break;
}
// cout<<num[i+1][j+1]<<" ";
}
}
// cout<<endl;
memset(dp,0x3f,sizeof(dp));
dp[0][0]=-1;
for(int i=1;i<s.size();i++){
for(int j=0;j<=n;j++){
for(int k=i;k>0 && num[k][i]<=j;k--){
dp[i][j]=min(dp[i][j],dp[k-1][j-num[k][i]]+1);
// cout<<dp[i][j]<<" ";
}
}
}
if(dp[s.size()-1][n]<45){
cout<<dp[s.size()-1][n];
}
else{
cout<<"-1";
}
return 0;
}