91分求助
查看原帖
91分求助
371409
Dangerise楼主2023/7/12 10:19

代码如下,我在输入时顺便记录所有的字段和,然后进行搜索,我为了防止溢出,在设置加号的时候加号间隔不超过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;
}
2023/7/12 10:19
加载中...