区别仅在计算 num[i][j] 时换成了stoll+substr函数。
//可AC代码
#include<bits/stdc++.h>
using namespace std;
#define rep(x,y,z) for(int x=y;x<=z;x++)
#define per(x,y,z) for(int x=y;x>=z;x--)
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
typedef long long LL;
const int N=45,M=1e5+5,INF=0x3f3f3f3f;
int T,n,m;
LL f[N][M],num[N][N];
void solve(){
// cin>>n;
string s;
cin>>s;
cin>>m;
n=s.length();
s=" "+s;
rep(i,1,n) rep(j,i,n) num[i][j]=num[i][j-1]*10+(s[j]-'0');
memset(f,INF,sizeof f);
f[0][0]=-1;
rep(i,1,n){
rep(k,0,m){
for(int j=i-1;j>=0 && num[j+1][i]<=k;j--){
f[i][k]=min(f[i][k],f[j][k-num[j+1][i]]+1);
}
}
}
if(f[n][m]<=40) cout<<f[n][m];
else cout<<-1;
}
int main(){
IOS;
// cin>>T;
T=1;
while(T--){
solve();
cout<<endl;
}
return 0;
}
//改为RE一个点代码
#include<bits/stdc++.h>
using namespace std;
#define rep(x,y,z) for(int x=y;x<=z;x++)
#define per(x,y,z) for(int x=y;x>=z;x--)
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
typedef long long LL;
const int N=45,M=1e5+5,INF=0x3f3f3f3f;
int T,n,m;
LL f[N][M],num[N][N];
void solve(){
// cin>>n;
string s;
cin>>s;
cin>>m;
n=s.length();
s=" "+s;
rep(i,1,n) rep(j,i,n) num[i][j]=stoll(s.substr(i,j-i+1));
memset(f,INF,sizeof f);
f[0][0]=-1;
rep(i,1,n){
rep(k,0,m){
for(int j=i-1;j>=0 && num[j+1][i]<=k;j--){
f[i][k]=min(f[i][k],f[j][k-num[j+1][i]]+1);
}
}
}
if(f[n][m]<=40) cout<<f[n][m];
else cout<<-1;
}
int main(){
IOS;
// cin>>T;
T=1;
while(T--){
solve();
cout<<endl;
}
return 0;
}