HDU1518 Square(DFS)

Square

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11151    Accepted Submission(s): 3588

Problem Description

Given a set of sticks of various lengths, is it possible to join them end-to-end to form a square?

Input

The first line of input contains N, the number of test cases. Each test case begins with an integer 4 <= M <= 20, the number of sticks. M integers follow; each gives the length of a stick - an integer between 1 and 10,000.

Output

For each case, output a line containing "yes" if is is possible to form a square; otherwise output "no".

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

题意: 给一列数, 问能否把这列数分成四组, 且每组数的和相同。

解法: 有DFS进行回溯。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int a[25], n, ans;
bool vis[25];

int dfs(int cur, int len, int pos)//cur表示用过的个数, len表示长度, pos表示位置
{
    if(cur==n)
    return 1;
    for(int i=pos; i<n; i++)
    {
        if(vis[i]) continue;
        if(len+a[i]<ans)
        {
            vis[i] = 1;
            if(dfs(cur+1, len+a[i], i+1)) return 1;
            vis[i] = 0;
            if(len==0) return 0;
            while(a[i]==a[i+1]&&i+1<n) ++i;//剪枝
        }
        else if(len+a[i]==ans)
        {
            vis[i] = 1;
            if(dfs(cur+1, 0, 0)) return 1;
            vis[i] = 0;
            return 0;
        }
    }
    return 0;
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        int Sum = 0;
        scanf("%d", &n);
        for(int i=0; i<n; i++)
        {
            scanf("%d", &a[i]);
            Sum+=a[i];
        }
        if(Sum%4)
        {
            printf("no\n");
            continue;
        }
        ans = Sum/4;
        memset(vis, 0, sizeof(vis));
        int temp = dfs(0, 0, 0);
        printf("%s\n", temp?"yes":"no");
    }
    return 0;
}
时间: 2024-08-24 11:23:39

HDU1518 Square(DFS)的相关文章

HJDU 1518—— Square(DFS)

简单深搜~~~~ <strong>#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<functional> #define M 30 using namespace std; int vis[M],a[M],n,flag,sum; void dfs(int s,int cur,int d) { if(cur==3||fl

hdu4393Digital Square(dfs)

Digital Square Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1827 Accepted Submission(s): 714 Problem Description Given an integer N,you should come up with the minimum nonnegative integer M.M m

HDOJ 题目4394 Digital Square(DFS)

Digital Square Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1757    Accepted Submission(s): 677 Problem Description Given an integer N,you should come up with the minimum nonnegative integer

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

POJ 2488-A Knight&#39;s Journey(DFS)

A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31702   Accepted: 10813 Description Background The knight is getting bored of seeing the same black and white squares again and again and has decided to make a journey ar

A Knight&#39;s Journey (DFS)

Background The knight is getting bored of seeing the same black and white squares again and again and has decided to make a journey around the world. Whenever a knight moves, it is two squares in one direction and one square perpendicular to this. Th

poj1856Sea Battle(DFS)

题目链接: huangjing 思路: 这个题目当时想到是找联通快,但是不知道怎么判断这个联通快是不是标准的好船,后来看了别人的题解才知道可以用面积去判断...这个知道了就是简单的dfs找联通快了..注意是如果出现一艘破船则不用找了,直接输出就可以了... 题目: Sea Battle Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 2809   Accepted: 996 Description During the S

POJ 2488-A Knight&amp;#39;s Journey(DFS)

A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31702   Accepted: 10813 Description Background The knight is getting bored of seeing the same black and white squares again and again and has decided to make a journey ar

POJ 1856 Sea Battle(dfs)

Description During the Summit, the armed forces will be highly active. The police will monitor Prague streets, the army will guard buildings, the Czech air space will be full of American F-16s. Moreover, the ships and battle cruisers will be sent to