代码如下,我在输入时顺便记录所有的字段和,然后进行搜索,我为了防止溢出,在设置加号的时候加号间隔不超过9
#include<bits/stdc++.h>
using namespace std;
int arr[50];
int nums[50][50];
int n=0;
int target=0;
int get_sum(int a,int b) {
int sum=0;
for(int i=a; i<=b; i++) {
sum=sum*10+arr[i];
}
nums[a][b]=sum;
return sum;
}
int ans=0x7fffffff;
void dfs(int start,int cnt,int sum) {
if(cnt>=ans) {
return;
}
if(n-start<9) {
if(sum+nums[start-1][n-1]==target) {
ans=min(ans,cnt);
}
}
for(int i=start; i<min(start+9,n); i++) {
dfs(i+1,cnt+1,sum+nums[start-1][i-1]);
}
}
int main() {
string s;
cin>>s;
n=s.size();
for(int i=0; i<n; i++) {
arr[i]=s[i]-'0';
}
cin>>target;
for(int i=0; i<n; i++) {
for(int j=i; j<min(i+9,n); j++) {
get_sum(i,j);
}
}
dfs(1,0,0);
if(ans==0x7fffffff) {
cout<<-1<<endl;
} else {
cout<<ans<<endl;
}
return 0;
}