54分求解

P1874 快速求和

解决啦嘻嘻嘻 ```cpp #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&&aa==s1.size()){ //cout<<sum<<" "<<bb<<" "<<aa<<endl; 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+1,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; } ```
by wwwzne @ 2023-09-26 21:38:05


|