zoukankan      html  css  js  c++  java
  • poj 1564 Sum It Up (DFS+ 去重+排序)

    http://poj.org/problem?id=1564

    该题运用DFS但是要注意去重,不能输出重复的答案

    两种去重方式代码中有标出

    第一种if(a[i]!=a[i-1])意思是如果这个数a[i]和上一个数相同,那么记录数组的同一个位置就没有必要再放入这个数。例如:4 3 3 2构成和是7,b数组的第二个位置放了3,则后面的那个3就没有必要再放入记录数组的第二个位置了。(可能会放到后面的位置)...

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<stdlib.h>
    #include<vector>
    #include<algorithm>
    #define N 110
    
    using namespace std;
    
    int a[N], b[N];
    int t, n, f;
    
    int cmp(const void *a, const void *b)
    {
        return *(int *)b - *(int *)a;
    }
    
    void DFS(int k, int j, int sum)
    {
        int i;
        if(sum == t)
        {
            f = 1;
            qsort(b, j, sizeof(b[0]), cmp);
    
            printf("%d", b[0]);
    
            for(i = 1 ; i < j ; i++)
                printf("+%d", b[i]);
    
            printf("
    ");
    
            return ;
        }
        for(i = k ; i < n ; i++)
        {
            if(a[i] != a[i - 1] || i == k)
            {
                b[j] = a[i];
                DFS(i + 1, j + 1, sum + a[i]);
    
            }
            /*if(sum + a[i] <= t)
            {
                b[j] = a[i];
                DFS(i + 1, j + 1, sum + a[i]);
                while(a[i] == a[i + 1] && i + 1 < n)
                    i++;//去重
            }*/
    
        }
    }
    
    
    int main()
    {
        int i;
        while(scanf("%d%d", &t, &n), t + n)
        {
            f = 0;
            for(i = 0 ; i < n ; i++)
                scanf("%d", &a[i]);
    
            qsort(a, n, sizeof(a[0]), cmp);
    
            printf("Sums of %d:
    ", t);
    
            DFS(0, 0, 0);
    
            if(f == 0)
                printf("NONE
    ");
        }
        return 0;
    }
  • 相关阅读:
    properties文件作用以及在哪些地方用
    UUID.randomUUID().toString() 的作用
    devops简介
    Redis数据库
    锁方面区别
    python如何操作git
    使用django实现websocket
    迁移与备份
    服务端主动给客户端推送消息
    使用vim登录root管理员用户显示su:鉴定故障
  • 原文地址:https://www.cnblogs.com/qq2424260747/p/4739832.html
Copyright © 2011-2022 走看看