hdu 4403 爆搜

题意:给一串数字,在其间加入若干加号和一个等号,问使等式成立的方案总数

if the digits serial is "1212", you can get 2 equations, they are "12=12" and "1+2=1+2".

一看就是搜索,但是不太好写,还是参考了kuang神和这里

的大神写的

先枚举左边的所有和的情况,然后判断右边是否存在相等的情况

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 #include<map>
 8 using namespace std;
 9 #define MOD 1000000007
10 const int INF=0x3f3f3f3f;
11 const double eps=1e-5;
12 typedef long long ll;
13 #define cl(a) memset(a,0,sizeof(a))
14 #define ts printf("*****\n");
15 const int MAXN=20;
16 char s[MAXN];
17 int n,m,tt;
18 ll sum[MAXN][MAXN],len,ans,pos;
19 void dfs2(int i,ll d,ll pre)
20 {
21     if(i>len)
22     {
23         if(pre==d)  ans++;
24         return;
25     }
26     for(int k=i;k<=len;k++)
27     {
28         dfs2(k+1,d+sum[i][k],pre);
29     }
30     return;
31 }
32 void dfs1(int i,ll d)
33 {
34     if(i>pos)   dfs2(pos+1,0,d);
35     for(int k=i;k<=pos;k++) //在第k个位置上放置加号
36     {
37         dfs1(k+1,d+sum[i][k]);
38     }
39     return;
40 }
41 int main()
42 {
43     int i,j,k;
44     #ifndef ONLINE_JUDGE
45     freopen("1.in","r",stdin);
46     #endif
47     while(scanf("%s",s+1))
48     {
49         ans=0;
50         if(s[1]==‘E‘)   break;
51         len=strlen(s+1);
52         for(i=1;i<=len;i++)
53         {
54             for(j=i;j<=len;j++)
55             {
56                 sum[i][j]=0;
57                 for(k=i;k<=j;k++)   sum[i][j]=sum[i][j]*10+s[k]-‘0‘;
58             }
59         }
60         for(pos=1;pos<len;pos++)
61         {
62             dfs1(1,0);
63         }
64         printf("%I64d\n",ans);
65     }
66 }
时间: 2024-11-29 11:53:28

hdu 4403 爆搜的相关文章

HDU 3316 爆搜水题

爆搜水题 模拟扫雷,规则和扫雷一样 给出原图,求在X,Y位置点一下以后的图形,没有弹出的点输出-1,弹出的点输出这个点的数字 从起始点DFS一下即可 #include "stdio.h" #include "string.h" int dir[8][2]={ {-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1} }; int n; int hash[110][110]; char str[110][110]; i

hdu 5305(爆搜+二染色) Friends

题意: 有n个人m对朋友,朋友有两种一种online的,一种face to face的.现在要让你对这些朋友性质进行安排,让每一个人的线上朋友和线下朋友人数是相同的,求满足的方案数. 思路 直接暴力染色. 然后减减枝. 一个就是对于每个人的度一定是偶数. 另外一个就是染色中,对于一个节点染色的不能超过一半才能继续dfs. 参考code: /* #pragma warning (disable: 4786) #pragma comment (linker, "/STACK:0x800000&quo

HDU 4403 A very hard Aoshu problem(dfs爆搜)

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 nam

HDU 4735 DLX爆搜

Little Wish~ lyrical step~ Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 417    Accepted Submission(s): 109 Problem Description N children are living in a tree with exactly N nodes, on each n

hdu 5031 Lines 爆搜

其实嘞,这个线可以只延伸一端 然后嘞,爆搜一次就可以 最后嘞,600-800ms过 本弱就是弱啊,你来打我呀-- #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int a[100][100]; int n,m,ans; bool dfs(int step) { int i,j,t,ii,jj,x,y,cnt,tx,t

HDU 5025 水爆搜

2014 ACM/ICPC Asia Regional Guangzhou Online 水爆搜 N*N矩阵,找最长的一条路径,使'.'最多,路径可以且最多可以转一次90°. 枚举每个点,枚举8方向连续的'.'有多少个,再枚举路径方式. #include "stdio.h" #include "string.h" int main() { int n,ans,i,j,k; int sum[9]; char str[101][101]; while (scanf(&q

hdu 4403 A very hard Aoshu problem

hdu 4403 A very hard Aoshu problem 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4403 DFS 这几天集训,一天也就写个4题,被虐哭QAQ.回寝室后游少说解搜索就大胆搜,最后剪个枝就好了Orz,然后我就尝试解这题(剪枝要风骚).我先枚举等号的位置equ,然后搜索加号add的位置,然后主要的剪枝:如果等号左边运算后小于等号右边各个位上的数的和,那么后面的肯定不满足条件,右边同理.最后要小心爆int,这里吃了很多W

hdu5355 思维+爆搜

pid=5355">http://acm.hdu.edu.cn/showproblem.php?pid=5355 Problem Description There are?m?soda and today is their birthday. The?1-st soda has prepared?n?cakes with size?1,2,-,n. Now?1-st soda wants to divide the cakes into?m?parts so that the total

8/2 multi4 E找规律+模拟,空间开小了然后一直WA。。。J爆搜check不严谨WA。。。multi3 G凸包判共线写错数组名???样例太好过.想哭jpg。

multi4 Problem E. Matrix from Arrays 题意:构造一个数组,求子矩阵前缀和. 思路:打表找规律,"发现"L为奇数时循环节为L,为偶数时循环节为2L,求相应循环节的二维前缀和然后加加减减计算一下就好. 虚伪地证明一下循环节:L为奇数时对于第x行/列开始的位置有(x  +  x+L-1)*L/2   ->     (2x+L-1)/2(为整数)*L,因此扫过L行/列也就扫过了L整数倍"(2x+L-1)/2"倍的A[0]~A[L],