hdu 1518 N根木棒 能否拼成正方形 dfs

N根木棒 能否拼成正方形

Sample Input
3
4 1 1 1 1
5 10 20 30 40 50
8 1 7 2 6 4 4 3 5

Sample Output
yes
no
yes

 1 # include <cstdio>
 2 # include <cmath>
 3 # include <iostream>
 4 # include <cstring>
 5 # include <algorithm>
 6 using namespace std ;
 7
 8 int n,sum,l;
 9 int a[30],vis[30];
10 int flag;
11
12 bool cmp(int x , int y)
13 {
14     return x > y ;
15 }
16
17 void dfs(int bian,int l,int k)  //已完成的边数  当前边的长度
18 {
19     int i;
20     if(bian==4)
21     {
22         flag = 1;
23         return ;
24     }
25     if(l == sum)
26     {
27         if(flag)
28             return ;
29         dfs(bian+1,0,0);
30     }
31     for(i = k; i<n; i++)
32     {
33         if(!vis[i] && l+a[i]<=sum)
34         {
35             if(flag)
36                 return;
37             vis[i] = 1;
38             dfs(bian,a[i]+l,i+1);
39             vis[i] = 0;
40         }
41     }
42 }
43
44 int main()
45 {
46     int t;
47     scanf("%d",&t);
48     while(t--)
49     {
50         int i;
51         sum = 0;
52         scanf("%d",&n);
53         for(i = 0; i<n; i++)
54         {
55             scanf("%d",&a[i]);
56             sum+=a[i];
57         }
58         if(sum%4!=0)
59         {
60             printf("no\n");
61             continue;
62         }
63         sum = sum/4;
64
65         for(i = 0; i<n; i++)
66         {
67             if(a[i]>sum)
68                 break;
69         }
70         if(i!=n)
71         {
72             printf("no\n");
73             continue;
74         }
75         sort(a,a+n,cmp) ;  //从大到小排序可以减小耗时
76
77         memset(vis,0,sizeof(vis));
78         flag = 0;
79         dfs(0,0,0);
80         if(flag)
81             printf("yes\n");
82         else
83             printf("no\n");
84     }
85
86     return 0;
87 }

时间: 2024-10-13 00:27:14

hdu 1518 N根木棒 能否拼成正方形 dfs的相关文章

(hdu step 4.3.5)Sticks(将n根木棒合成若干根等长的木棒,求合成后的木棒的长度的最小值)

题目: Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 364 Accepted Submission(s): 116   Problem Description George took sticks of the same length and cut them randomly until all parts became

HDU 1698 Just a Hook (线段树 成段更新 lazy-tag思想)

题目链接 题意: n个挂钩,q次询问,每个挂钩可能的值为1 2 3,  初始值为1,每次询问 把从x到Y区间内的值改变为z.求最后的总的值. 分析:用val记录这一个区间的值,val == -1表示这个区间值不统一,而且已经向下更新了, val != -1表示这个区间值统一, 更新某个区间的时候只需要把这个区间分为几个区间更新就行了, 也就是只更新到需要更新的区间,不用向下更新每一个一直到底了,在更新的过程中如果遇到之前没有向下更新的, 就需要向下更新了,因为这个区间的值已经不统一了. 其实这就

51Nod - 1097 拼成最小的数

51Nod - 1097 拼成最小的数 设有n个正整数,将它们联接成一排,组成一个最小的多位整数. 例如: n=2时,2个整数32,321连接成的最小整数为:32132, n=4时,4个整数55,31,312, 33 联接成的最小整数为:312313355 Input 第1行:1个数N.(2 <= N <= 10000) 第2 - N + 1行:每行1个正整数.(1 <= A[i] <= 10^9) Output 输出拼在一起的最小整数.由于数据量太大,请以1000个字符为单位,输

Oracle一列的多行数据拼成一行显示字符

Oracle一列的多行数据拼成一行显示字符 oracle 提供了两个函数WMSYS.WM_CONCAT 和 ListAgg函数. www.2cto.com 先介绍:WMSYS.WM_CONCAT 例: id  name 1   aa 2   bb 3   cc 要的结果是"aa,bb,cc" select WMSYS.WM_CONCAT(a.name) from user a 这样的话,查询出的结果:"aa,bb,cc" www.2cto.com 分隔符如果不需要用

hdu 1518 Square (dfs搜索可参考poj1011)

Square Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8589    Accepted Submission(s): 2784 Problem Description Given a set of sticks of various lengths, is it possible to join them end-to-end

c#后台一般处理程序中把变量的值拼成json格式字符串

//一般处理程序代码string login_name = context.Request["login_name"].Trim(); BLLS data = new BLLS(); string select_id = "select use_id from sq_sgxhcom.fru_users where [email protected]"; int use_id = Convert.ToInt32(data.Select(select_id, login

hdu 1518 Square(深搜dfs)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1518 --------------------------------------------------------------------------------------------------------------------------------------------

hdu 1518 Square(深搜+剪枝)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1518 题目大意:根据题目所给的几条边,来判断是否能构成正方形,一个很好的深搜应用,注意剪枝,以防超时! 1 #include <iostream> 2 #include <cstdio> 3 #include<algorithm> 4 #include <cstring> 5 using namespace std; 6 int ap[30],visit[30]

jQuery Ajax遍历表格,填充数据,将表格中的数据一条一条拼成Jason数组

$.ajax({ url: baseURL + "InvoiceSale/OnQuotaInvoiceSale", //点击核销单号时,点击核销时,交互的页面               type: "POST",                 data: JSON.stringify(createTable.resultData()),     //JSON传递整个表格数据,得到字符串数组               dataType: "json&q