HDU 4403 A very hard Aoshu problem (DFS暴力)
Posted brucemengbm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 4403 A very hard Aoshu problem (DFS暴力)相关的知识,希望对你有一定的参考价值。
题意:给你一个数字字符串。问在字符串中间加‘=’、‘+’使得‘=’左右两边相等。
1212 : 1+2=1+2, 12=12。
12345666 : 12+3+45+6=66。 1+2+3+4+56=66;
#include<stdio.h> #include<string.h> #include<string> #include<map> #include<stack> #include<math.h> #include<queue> #include<vector> #include<stdlib.h> #include<iostream> #include<algorithm> using namespace std; #define M 20005 vector<int>Ga,Gb; char s[50]; int l,len,ans; int a[M],b[M]; int num[55][55]; int get_num(int x,int y) { int sum=0; for(int i=x;i<=y;i++) sum=sum*10+s[i]-'0'; return sum; } void dfs2(int i,int lsum,int rsum) { if(i>=len) { if(lsum==rsum) ans++; return; } for(int k=i;k<len;k++) dfs2(k+1,lsum,rsum+num[i][k]); } void dfs1(int i,int sum) { if(i>=l) dfs2(i,sum,0); for(int k=i;k<l;k++) dfs1(k+1,sum+num[i][k]); } int main() { while(scanf("%s",s)) { if(s[0]=='E') break; ans=0; int i,j,k; len=strlen(s); for(i=0;i<len;i++) { for(j=i;j<len;j++) { num[i][j]=get_num(i,j); } } for(int a=1;a<len;a++) { l=a; dfs1(0,0); } printf("%d\n",ans); } return 0; } /* 1212 12345666 1235 */
以上是关于HDU 4403 A very hard Aoshu problem (DFS暴力)的主要内容,如果未能解决你的问题,请参考以下文章