Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 714 Accepted Submission(s): 467
题解,在一串数字内加+或-,使其等于N的方法数,深搜;
代码:
1 #include<stdio.h> 2 #include<string.h> 3 __int64 ans,N; 4 int len; 5 char s[15]; 6 void dfs(int t,__int64 sum){ 7 if(t==len){ 8 //printf("%I64d\n",sum); 9 if(sum==N)ans++; 10 return; 11 } 12 __int64 k=0; 13 for(int i=t;i<len;i++){ 14 k=k*10+s[i]-‘0‘; 15 dfs(i+1,sum+k); 16 if(t!=0)dfs(i+1,sum-k); 17 } 18 } 19 int main(){ 20 while(~scanf("%s%I64d",s,&N)){ 21 len=strlen(s); 22 ans=0; 23 dfs(0,0); 24 printf("%I64d\n",ans); 25 } 26 return 0; 27 } 28 /*#include<stdio.h> 29 #include<string.h> 30 __int64 ans,N; 31 int len; 32 char s[15]; 33 void dfs(int top,__int64 sum){ 34 if(top==len){//写成N了错的心酸。。。 35 //printf("%I64d %d\n",sum,len); 36 if(sum==N)ans++; 37 return ; 38 } 39 __int64 x=0; 40 for(int i=top;i<len;i++){ 41 x=x*10+s[i]-‘0‘; 42 dfs(i+1,sum+x); 43 if(top!=0)dfs(i+1,sum-x); 44 } 45 } 46 int main(){ 47 while(~scanf("%s%I64d",s,&N)){ 48 len=strlen(s); 49 //printf("%d\n",len); 50 ans=0; 51 dfs(0,0); 52 printf("%I64d\n",ans); 53 } 54 return 0; 55 }*/
How Many Equations Can You Find(dfs)
原文:http://www.cnblogs.com/handsomecui/p/4841324.html