zoukankan      html  css  js  c++  java
  • hdu 1258 Sum It Up dfs

    刚开始做的时候没有发现这道题目的坑人之处,就按照普通的方法去写,其实搜索的时候注意一下去重就可以了,

    先把所给的数排序,当找到一个合适的值后,要找与这层值不一样的再向下递归,

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 
     5 #define N 15
     6 int sum, n, vis[N], a[N], b[N], flag;
     7 
     8 int cmp (const void *a, const void *b)
     9 {
    10     return *(int *)b - *(int *)a;
    11 }
    12 void dfs (int x, int y, int z);
    13 
    14 int main ()
    15 {
    16     while (scanf ("%d %d", &sum, &n), n)
    17     {
    18         for (int i=0; i<n; i++)
    19             scanf ("%d", &a[i]);
    20         qsort (a, n,sizeof(a[0]), cmp);
    21 
    22         memset (vis, 0, sizeof(vis));
    23         flag  = 1;
    24         printf ("Sums of %d:
    ", sum);
    25         dfs(0, 0, 0);
    26         
    27         if ( flag )
    28             printf ("NONE
    ");
    29     }
    30     return 0;
    31 }
    32 
    33 void dfs (int x, int y,int z)
    34 {
    35     if (y > sum)
    36         return ;
    37     if (y == sum)
    38     {
    39         flag = 0;
    40         for (int i=0; i<x; i++)
    41             printf ("%d%c", b[i], i==x-1?'
    ':'+');
    42         return;
    43     }
    44 
    45     for (int i=z; i<n; i++)
    46     {
    47         if ( !vis[i] )
    48         {
    49             vis[i] = 1;
    50             b[x] = a[i];
    51             dfs(x+1, y+a[i], i+1);
    52             vis[i] = 0;
    53             while (a[i] == a[i+1])//去重
    54                 i++;
    55         }
    56     }
    57 }
    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    abp记录1
    javascript Date format(js日期格式化) 转载
    css 宽高等比
    MVC 自己创建URL 对象处理路径
    转载 Easyui Tree方法扩展
    Bootstrap 学习笔记1
    动态创建form 完成form 提交
    单例模式
    工厂模式(已体会到此模式的意义)
    设计模式实践
  • 原文地址:https://www.cnblogs.com/alihenaixiao/p/4026207.html
Copyright © 2011-2022 走看看