hdu 4403 简单搜索
思路:分等号左边和右边进行搜索
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define LL __int64 using namespace std; char str[20]; int n,ans; void right(LL sum,LL now,int cnt) { if(cnt==n) { if(sum==now) ans++; return ; } if(sum==0) return ; if(sum>=now*10+(LL)(str[cnt]-'0')) right(sum,now*10+(LL)(str[cnt]-'0'),cnt+1); if(sum>=now) right(sum-now,str[cnt]-'0',cnt+1); return ; } void left(LL sum,LL now,int cnt) { if(cnt) right(sum+now,str[cnt]-'0',cnt+1); if(cnt==n-1) return ; if(now) left(sum,now*10+(LL)(str[cnt]-'0'),cnt+1); left(sum+now,str[cnt]-'0',cnt+1); } int main() { int i,j; while(scanf("%s",&str),str[0]!='E') { n=strlen(str); ans=0; left(0,0,0); printf("%d\n",ans); } return 0; }