T^T找数字(搜索+二进制枚举)
题目链接:传送门
解题思路:看一眼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找数字(搜索+二进制枚举)相关推荐
- 潜水员:【爆搜 + 二进制枚举 + DP】
题目: 潜水员为了潜水要使用特殊的装备. 他有一个带2种气体的气缸:一个为氧气,一个为氮气. 让潜水员下潜的深度需要各种数量的氧和氮. 潜水员有一定数量的气缸. 每个气缸都有重量和气体容量. 潜水员为 ...
- HPU组队赛B:问题(二进制枚举)
时间限制1 Second 内存限制 512 Mb 题目描述 你有n个问题,你已经估计了第i个问题的难度为Ci,现在你想使用这些问题去构造一个问题集.比赛的问题集必须包含至少两个问题,而且比赛的总难度必 ...
- BZOJ1688|二进制枚举子集| 状态压缩DP
Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...
- 容斥原理(二进制枚举)
在计数时,必须注意无一重复,无一遗漏.为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计 ...
- HDU - 1796——容斥原理+二进制枚举
[题目描述] Now you get a number N, and a M-integers set, you should find out how many integers which are ...
- 超大背包问题(二进制枚举 + 二分)
超大背包问题 第一次看到这一题好像是在某一场比赛,就是给你一个炸空间和时间的背包,让你选最大的价值,看似是01背包然鹅今天在挑战程序设计这本书上看到了这题,看到了作者的做法,感觉豁然开朗,直接暴搜也会 ...
- Uva 1151 Buy or Build 二进制枚举+最小生成树
题目描述 万维网(WWN)是一家运营大型电信网络的领先公司. WWN希望在Borduria建立一个新的网络,您需要帮助WWN确定如何以最低的总成本设置其网络.有几个本地公司运营着一些小型网络(以下称为 ...
- 幼儿园买玩具_二进制枚举
. 幼儿园买玩具 蒜厂幼儿园有 nn 个小朋友,每个小朋友都有自己想玩的玩具.身为幼儿园园长的你决定给幼儿园买一批玩具,由于经费有限,你只能买 mm 个玩具.已知玩具商店一共卖 kk 种玩具,编号为 ...
- 二进制枚举子集(总结+应用)
文章目录 定义阐明 简单的知识铺垫 应用举例 代码实现 例题应用 思路如下: 题解如下: 其它例题 定义阐明 1.什么是子集:子集是一个数学概念:如果集合A的任意一个元素都是集合B的元素,那么集合A称 ...
最新文章
- Ubuntu下查找命令
- linux搭建Django环境,Linux (ubuntu 12.04)下搭建Python Django环境
- redux-4-ways
- mysql 使用索引_mysql使用索引的注意事项
- 宿主机挂载虚拟机磁盘文件guestmount
- master节点重置后添加node报错_企业实战(23)基于Docker平台的Jenkins添加node节点与报错详解(2)...
- jsp___jstl标签
- SpringBoot之kafka对接topic
- 华三H3c 交换机 vlan Hybird端口配置
- WPF—TreeView无限极绑定集合形成树结构
- 牛客每日练习----mxh与冰红茶的故事,mengxiang000的龙,组合数问题二
- ubuntu18安装ros1
- JavaSE经典编程题
- altiium designer改变图纸大小
- STM32歌唱《孤勇者》(标准库)
- Java网络编程套接字
- windows7 vl版_与你分享 | Windows 7
- c14cpm和dpm怎么换算_核辐射物理及探测学
- B2N给互联网商业模式注入新活力
- 魅族浏览器android,魅族浏览器,Flyme让原配更懂你
热门文章
- 错误调试:Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4
- GNU C 与 ANSI C(下)
- 进度管理工具 planner
- 进程间通信系列 之 信号实例
- Java不支持创建范型数组分析
- 2008社工新书《黑客社会工程学攻击》
- 图解再谈ssh port forwarding-ssh隧道技术
- 使用Redis构建全局并发锁
- [20170828]grep过滤技巧.txt
- 浏览器cookie那些事儿