54分求解
  • 板块P1874 快速求和
  • 楼主wwwzne
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/9/26 19:07
  • 上次更新2023/11/2 18:00:07
查看原帖
54分求解
1021654
wwwzne楼主2023/9/26 19:07
#include<bits/stdc++.h>
using namespace std;
string s1;
int endd;
int step=INT_MAX;
bool st=false;
int sum1(int x,int y){
	if(x==y)return s1[x]-'0';
	int de=0;
	for(int i=x;i<=y;i++){
		de=de*10+s1[i]-'0';
	}
	return de;
}
void dfs(int sum,int bb,int aa){
	if(sum>endd){
		return;
	}else if(sum==endd){
		if(bb<step)step=bb;
			st=true;	
	}
	for(int i=aa;i<s1.size();i++){
		int dd=sum1(aa,i);
		//cout<<dd<<"  ss"<<bb<<" "<<sum<<" "<<aa<<" "<<i<<" "<<bb<<endl;
		if(dd==0){
			//dfs(sum+dd,bb,i+1);
			continue;
		}
		dfs(sum+dd,bb+1,i+1);
	}
	return;
}
int main(){
	cin>>s1;
	cin>>endd;	
	int dsd=sum1(0,s1.size()-1);
	if(dsd<endd){
		cout<<-1;
		return 0;
	}//剪枝 
	//cout<<s1[0]<<s1[1]<<s1[2]<<endl;
	//cout<<sum1(1,2);
	dfs(0,0,0);
	if(st==false){
		cout<<-1;
	}else
	cout<<step-1;
	return 0;
}
2023/9/26 19:07
加载中...