题目
测试点
代码:
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5,inf=INT_MAX;
string s;
int n,m;
int a[45];
int dp[N][45];
int main(){
cin>>s>>m;
for(int i=0;i<s.size();i++){
a[i+1]=s[i]-'0';
}
n=s.size();
for(int i=0;i<N;i++){
for(int j=0;j<45;j++){
dp[i][j]=inf;
}
}
dp[0][0]=0;
for(int i=0;i<=m;i++){
for(int j=0;j<=n-1;j++){
if(dp[i][j]!=inf){
int num=0,p=j+1;
while(p<=n && i+num<m){
num=num*10+a[p];
dp[i+num][p]=min(dp[i+num][p],dp[i][j]+1);
p++;
}
}
}
}
if(dp[m][n]==inf)cout<<-1;
else cout<<dp[m][n]-1;
return 0;
}