题目链接:传送门
解题思路:看一眼n的大小,发现只有20,所以我们可以用决策搜索,或者二进制枚举解决,用搜索做法则需要判断第i个位置是否选取,然后当前的总和是多少,其实用二进制枚举也是这样做的,我们判断当前这个数是否选取,然后每次选取从1到n判断是否选取完成后,把选取的和与k进行比较,如果相等则直接按照给定选取的序列的顺序输出就行。其实两种做法的原理,或者说思路都是一样的。时间复杂度均为\(O(2^N)\)
搜索Code://8MS

#include<bits/stdc++.h>
using namespace std;
int n,k,a[25],vis[25];
bool fg;
void dfs(int loc,int sum) {if(loc == n + 1 || fg) {if(sum == k) {//当前总和等于kfg = true;puts("YES");for(int i = 1;i <= n; ++i)if(vis[i])printf("%d ",a[i]);putchar('\n');}return;}vis[loc] = 1;dfs(loc+1,sum+a[loc]);//选取第loc个位置的数vis[loc] = 0;dfs(loc+1,sum);//不选去第loc个位置的数
}int main()
{while(~scanf("%d%d",&n,&k)) {fg = false;for(int i = 1;i <= n; ++i)scanf("%d",&a[i]);dfs(1,0);if(!fg)puts("NO");memset(vis,0,sizeof vis);}return 0;
}

二进制枚举Code://64MS

#include<bits/stdc++.h>
using namespace std;
int n,k,a[25],b[25];
int main()
{while(~scanf("%d%d",&n,&k)) {for(int i = 0;i < n; ++i) scanf("%d",&a[i]);bool fg = true;for(int i = 0,len = 1 << n;i < len; ++i) {//我们把选取的状态拆分为2^N,然后找到我们需要的就break就行long long temp = 0;for(int j = 0; j < n; ++j)if(i >> j & 1)//选取第j个元素b[j] = 1,temp += a[j];else//不选去b[j] = 0;if(temp == k) {fg = false;puts("YES");for(int i = 0;i < n; ++i) {if(b[i])printf("%d ",a[i]);}putchar('\n');break;}}if(fg)puts("NO");}return 0;
}

T^T找数字(搜索+二进制枚举)相关推荐

  1. 潜水员:【爆搜 + 二进制枚举 + DP】

    题目: 潜水员为了潜水要使用特殊的装备. 他有一个带2种气体的气缸:一个为氧气,一个为氮气. 让潜水员下潜的深度需要各种数量的氧和氮. 潜水员有一定数量的气缸. 每个气缸都有重量和气体容量. 潜水员为 ...

  2. HPU组队赛B:问题(二进制枚举)

    时间限制1 Second 内存限制 512 Mb 题目描述 你有n个问题,你已经估计了第i个问题的难度为Ci,现在你想使用这些问题去构造一个问题集.比赛的问题集必须包含至少两个问题,而且比赛的总难度必 ...

  3. BZOJ1688|二进制枚举子集| 状态压缩DP

    Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...

  4. 容斥原理(二进制枚举)

    在计数时,必须注意无一重复,无一遗漏.为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计 ...

  5. HDU - 1796——容斥原理+二进制枚举

    [题目描述] Now you get a number N, and a M-integers set, you should find out how many integers which are ...

  6. 超大背包问题(二进制枚举 + 二分)

    超大背包问题 第一次看到这一题好像是在某一场比赛,就是给你一个炸空间和时间的背包,让你选最大的价值,看似是01背包然鹅今天在挑战程序设计这本书上看到了这题,看到了作者的做法,感觉豁然开朗,直接暴搜也会 ...

  7. Uva 1151 Buy or Build 二进制枚举+最小生成树

    题目描述 万维网(WWN)是一家运营大型电信网络的领先公司. WWN希望在Borduria建立一个新的网络,您需要帮助WWN确定如何以最低的总成本设置其网络.有几个本地公司运营着一些小型网络(以下称为 ...

  8. 幼儿园买玩具_二进制枚举

    . 幼儿园买玩具 蒜厂幼儿园有 nn 个小朋友,每个小朋友都有自己想玩的玩具.身为幼儿园园长的你决定给幼儿园买一批玩具,由于经费有限,你只能买 mm 个玩具.已知玩具商店一共卖 kk 种玩具,编号为 ...

  9. 二进制枚举子集(总结+应用)

    文章目录 定义阐明 简单的知识铺垫 应用举例 代码实现 例题应用 思路如下: 题解如下: 其它例题 定义阐明 1.什么是子集:子集是一个数学概念:如果集合A的任意一个元素都是集合B的元素,那么集合A称 ...

最新文章

  1. Ubuntu下查找命令
  2. linux搭建Django环境,Linux (ubuntu 12.04)下搭建Python Django环境
  3. redux-4-ways
  4. mysql 使用索引_mysql使用索引的注意事项
  5. 宿主机挂载虚拟机磁盘文件guestmount
  6. master节点重置后添加node报错_企业实战(23)基于Docker平台的Jenkins添加node节点与报错详解(2)...
  7. jsp___jstl标签
  8. SpringBoot之kafka对接topic
  9. 华三H3c 交换机 vlan Hybird端口配置
  10. WPF—TreeView无限极绑定集合形成树结构
  11. 牛客每日练习----mxh与冰红茶的故事,mengxiang000的龙,组合数问题二
  12. ubuntu18安装ros1
  13. JavaSE经典编程题
  14. altiium designer改变图纸大小
  15. STM32歌唱《孤勇者》(标准库)
  16. Java网络编程套接字
  17. windows7 vl版_与你分享 | Windows 7
  18. c14cpm和dpm怎么换算_核辐射物理及探测学
  19. B2N给互联网商业模式注入新活力
  20. 魅族浏览器android,魅族浏览器,Flyme让原配更懂你

热门文章

  1. 错误调试:Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4
  2. GNU C 与 ANSI C(下)
  3. 进度管理工具 planner
  4. 进程间通信系列 之 信号实例
  5. Java不支持创建范型数组分析
  6. 2008社工新书《黑客社会工程学攻击》
  7. 图解再谈ssh port forwarding-ssh隧道技术
  8. 使用Redis构建全局并发锁
  9. [20170828]grep过滤技巧.txt
  10. 浏览器cookie那些事儿