首页 > 代码库 > HDU 4403 A very hard Aoshu problem (DFS暴力)
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 */
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。