博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(深搜)Sum It Up -- poj --1564
阅读量:6834 次
发布时间:2019-06-26

本文共 1481 字,大约阅读时间需要 4 分钟。

链接:

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

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#problem/F

 

给了一个数 m,给一个由 n 个数组成的数组 a[] , 求和为 m 的 a[] 的子集

 

pos 代表的是搜到第 pos 个元素,ans 代表的是 b[] 数组中存的第 ans 个数 

我一定要学会深搜!!!

 

代码:

#include 
#include
#include
#include
using namespace std;int n, m, flag;int a[11000], b[11000];int cmp(int a, int b){ return a > b;}
///pos 代表的是搜到第 pos 个元素,  ///ans 代表的是 b[] 数组中存的第 ans 个数, b[] 数组里存的是和为 sum 的 void dfs(int pos , int ans, int sum)
{    if(sum == n)    {        flag = 1;        sort(b, b + ans, cmp);        for(int i = 0; i < ans; ++i)        {            if(!i)                printf("%d",b[i]);            else if(i)                printf("+%d",b[i]);        }        printf("\n");        return;    }    for(int i = pos; i < m; ++i)    {        if(sum + a[i] <= n)        {            b[ans] = a[i];            dfs(i + 1, ans + 1, sum + a[i]);            while(i + 1 < m && a[i] == a[i + 1])//去重                ++i;        }    }} /*去重:   例如:3 3 2 1 1   为了防止出现 2+1              2+1   这样的重复数据   刚看时我连去重的意思都弄错了,不知道是什么意思,还好调试了一遍知道了*/int main (){    while(scanf("%d%d", &n, &m), n || m)    {        for(int i = 0; i < m; ++i)            scanf("%d", &a[i]);        flag = 0;        sort(a, a + m, cmp);        printf("Sums of %d:\n", n);        dfs(0, 0, 0);        if(!flag)            printf("NONE\n");    }    return 0;}

 

转载于:https://www.cnblogs.com/YY56/p/4737424.html

你可能感兴趣的文章
【LeetCode】120. Triangle (3 solutions)
查看>>
boost::interprocess(1)
查看>>
Noi2011 : 智能车比赛
查看>>
设置tomcat 编译文件位置【转】
查看>>
NOI2010 : 超级钢琴
查看>>
sine曲线向前运动
查看>>
ios的@property属性和@synthesize属性(转)
查看>>
四种常见的 POST 提交数据方式
查看>>
编写一个C语言函数,要求输入一个url,输出该url是首页、目录页或者其他url
查看>>
ubuntu 14.04 chromium,firefox 怎样正确安装Adobe flash player
查看>>
Linux makefile 教程 很具体,且易懂
查看>>
linux用dd测试磁盘速度
查看>>
八大排序算法总结
查看>>
Fibre Channel和Fiber Channel
查看>>
两年前实习时的文档——Platform学习总结
查看>>
Performance Tuning MySQL
查看>>
【WP8】让TextBox文本支持滑动(Scroll)
查看>>
在IIS上创建FTP服务
查看>>
Orchard之在前台显式一个属于自己的列表
查看>>
openfire文件夹
查看>>