zoukankan      html  css  js  c++  java
  • HDOJ搜索专题之Square

    题目大意:给定n个正整数,问能否分成4组,且每组的和相等。

    分析:这题就是sticks那题的简化版。思路一样。

    View Code
     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 #include <vector>
     5 #define N 20
     6 using namespace std;
     7 vector<int> edge[4];
     8 int len[N],n,sum;
     9 char vis[N],yes;
    10 int cmp(const void*a,const void*b)
    11 {
    12   return *(int*)b-*(int*)a;
    13 }
    14 void dfs(int k,int l)
    15 {
    16   int i;
    17   if(l==sum/4)
    18   {
    19     dfs(k+1,0);
    20     return;
    21   }
    22   if(k==4 && l==0)
    23   {
    24     yes=1;
    25     return;
    26   }
    27   if(l==0)
    28   {
    29     if(k==0)  i=0;
    30     else  i=edge[k-1].front()+1;
    31     for(;i<n && vis[i];i++);
    32     if(i<n && len[i]<=sum/4)
    33     {
    34       vis[i]=1;
    35       edge[k].push_back(i);
    36       dfs(k,len[i]);
    37       edge[k].pop_back();
    38       vis[i]=0;
    39     }
    40   }
    41   else
    42   {
    43     for(i=edge[k].back()+1;!yes && i<n;i++)
    44     {
    45       if(vis[i] || len[i]+l>sum/4)  continue;
    46       vis[i]=1;
    47       edge[k].push_back(i);
    48       dfs(k,l+len[i]);
    49       edge[k].pop_back();
    50       vis[i]=0;
    51       if(len[i]+l==sum/4) break;
    52     }
    53   }
    54 }
    55 int main()
    56 {
    57   int t,i;
    58   scanf("%d",&t);
    59   while(t--)
    60   {
    61     scanf("%d",&n);
    62     sum=0;
    63     for(i=0;i<n;i++)  scanf("%d",&len[i]),sum+=len[i];
    64     qsort(len,n,sizeof(len[0]),cmp);
    65     for(i=0;i<4;i++)  edge[i].clear();
    66     memset(vis,0,sizeof(vis));
    67     yes=0;
    68     if(sum%4==0)  dfs(0,0);
    69     if(yes) puts("yes");
    70     else  puts("no");
    71   }
    72   return 0;
    73 }
  • 相关阅读:
    视图类
    基于前一天再补充
    多表与基表等概念
    模块与序列化
    vue简单实现购物车列表功能
    再顾vue
    再探vue
    iptables编辑
    python 字符串替换、正则查找替换
    Map的遍历
  • 原文地址:https://www.cnblogs.com/algorithms/p/2508253.html
Copyright © 2011-2022 走看看