http://acm.hdu.edu.cn/showproblem.php?pid=4403
题意:
给出一串数字,在里面添加一个等号和多个+号,使得等式成立,问有多少种不同的式子。
思路:
数据量比较小,直接dfs爆搜答案即可。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<map> 6 using namespace std; 7 8 char s[20]; 9 int a[2][100], tot[2], ans; 10 map<int,int> f; 11 12 void dfs(int cur, int pre, int sum, int ends, int id) 13 { 14 if(cur == ends) 15 { 16 if(pre) return; 17 if(!id) f[sum]++; 18 else if(f[sum]) ans+=f[sum]; 19 return; 20 } 21 dfs(cur+1,0,sum+pre*10+s[cur]-'0',ends,id); 22 dfs(cur+1,pre*10+s[cur]-'0',sum,ends,id); 23 } 24 25 int main() 26 { 27 //freopen("in.txt","r",stdin); 28 while(~scanf("%s",s) && s[0]!='E') 29 { 30 ans = 0; 31 int n = strlen(s); 32 for(int i=1;i<n;i++) 33 { 34 f.clear(); 35 dfs(0,0,0,i,0); 36 dfs(i,0,0,n,1); 37 } 38 printf("%d\n",ans); 39 } 40 }