枚举算法

什么是枚举?
  枚举,顾名思义,就是用最笨的方法,去解决问题(暴力枚举),一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。

枚举算法是我们在日常中使用到的最多的一个算法,它的核心思想就是:

枚举所有的可能
枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:(1)可预先确定候选答案的数量;(2)候选答案的范围在求解之前必须有一个确定的集合。
接下来几道题可以让你更加的了解枚举

1.楼层编号
题目描述:

小林在NOIP比赛期间住在“新世界”酒店。和其他酒店不一样的是,这个酒店每天都有一个高能的数字t,这个数字在楼层中是不会出现的,以t=3为例,则3、13、31、33等楼层是不存在的,楼层编号为1,2,4,5,……所以实际上的4楼才是3楼
已知小林预定了编号为m层的房间,并且当天高能数字是t,现在他想知道房间所在的真实楼层是多少
1
2
3
4
输入描述

一行两个整数m和t,1<=m<=100000,0<=t<=9,保证m对t合法
1
输出描述

一行一个整数,表示真实楼层
1
样例输入

14 3

样例输出

12

思路:

1.包含这个高能数字的楼层一定不会出现,则有算法如下

bool s(int a,int b){
while(a!=){
if(a%==b){
return false;
}
a/=;
}
return true;
}

2.用for循环对sum进行累加,若不包含高能数字(即s(i,高能数字)=true)则sum++

for(int i=;i<=m;i++){
if(s(i,t)){
sum++;
}
}
cout<<sum

代码:

#include <iostream>
using namespace std;
bool s(int a,int b){
while(a!=){
if(a%==b){
return false;
}
a/=;
}
return true;
}
int main(){
int m,t,sum=;
cin>>m>>t;
for(int i=;i<=m;i++){
if(s(i,t)){
sum++;
}
}
cout<<sum;
return ;
}

2.冰壶比赛

题目描述:

在冰壶比赛中,给出一个目标点P以及一个规定的正整数r。每一局由甲和乙两队轮流投冰壶各8次后,该局比赛结束。此时,哪一方的冰壶最终离目标点P更近,该方得分,另一方不得分。得分方每颗离目标点P距离小于或等于r、位置较另一队所有冰壶都更接近目标点P的冰壶都可以得1分

比赛最多进行10局。双方之间的某局比赛结束后,落后一方可以弃权。此时,比赛不再进行下去

已知每一局结束时,双方的每个冰壶离目标点P的距离以及正整数r,请写一个程序判断两队之间每一局比赛的得分,以及总得分

输入:

第一行一个正整数r

以下有若干行(不超过20行),每一行8个正整数(之间用一个空格间隔)

第二行的第j个数表示第一局比赛结束时,甲方的第j个冰壶距离目标点P的距离

第三行的第j个数表示第一局比赛结束时,乙方的第j个冰壶距离目标点P的距离

……

第2k行的第j个数表示第k局比赛结束时,甲方的第j个冰壶距离目标点P的距离

第2k+1行的第j个数表示第k局比赛结束时,乙方的第j个冰壶距离目标点P的距离

如果有一方中途弃权,则最后一行(偶数行)只有一个整数-1,表示此时发生弃权情况

输出:

输出若干行,每行两个整数,中间以一个冒号间隔,表示每一局比赛甲乙双方的比分(甲得分在前)。最后一行有2个整数,中间以一个冒号间隔,表示甲乙双方比赛的最终得分(甲得分在前)

意思就是,先输入一个“标准”r,有10场比赛,每场比赛打8次,取最好成绩(最近的也就是最小的),再与对手最好成绩比较,比对手低的话一定不得分,比对手高的话还要比标准要小或等于才算得分,也就是说,每场比赛的得分,一定有一方不得分,有可能出现都不得分的情况,若弃权的话直接输出后return 0;即可。最后输出总的比分(计数即可)
1
2
3
主要还是枚举

样例输入

12

5 60 25 74 71 100 3 93

66 75 70 66 52 73 67 14

93 84 74 99 79 64 89 22

65 5 95 59 80 8 35 61

65 61 49 60 58 50 32 85

68 38 96 38 82 64 26 93

74 92 47 21 97 30 45 78

44 99 90 27 3 46 55 34

49 45 83 3 18 1 67 23

60 47 95 81 17 1 87 85

18 74 74 84 29 20 27 71

37 60 26 56 23 65 67 49

57 7 62 92 52 5 10 69

46 97 88 28 76 27 66 7

89 89 94 31 11 20 1 17

19 48 35 6 77 61 45 21

52 11 76 70 73 99 85 55

90 25 20 7 64 24 94 4

3 43 32 74 10 93 35 77

77 100 63 91 10 73 22 57

样例输出

2:0

0:2

0:0

0:1

0:0

0:0

1:0

1:0

0:2

1:0

5:5

样例解释:

可以看到标准为12,

第一局,甲最低3,乙最低14,3<14&&3<=12,甲得分,乙不得分

第二局,甲最低22,乙最低5,5<22&&5<=12,乙得分,甲不得分

第三局,甲最低32,乙最低26,都没有小于等于标准,都不得分

。。。。。。

代码

#include<iostream>
#include<string>
using namespace std;
int main()
{
int r,i,j;
cin>>r;
int a[],b[],f=,f1=,zf=,zf1=,min=,min1=;
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
cin>>a[j];
if(a[]==-)
{
cout<<zf<<':'<<zf1;
return ;
}
}
for(j=;j<=;j++)
{
cin>>b[j];
}
for(j=;j<=;j++)
{
if(a[j]<min)
{
min=a[j];
}
}
for(j=;j<=;j++)
{
if(b[j]<min1)
{
min1=b[j];
}
}
if(min<min1)
{
for(j=;j<=;j++)
{
if(a[j]<=r&&a[j]<min1)
{
f++;
}
}
cout<<f<<':'<<f1<<endl;
zf=zf+f;
f=;
}
else if(min1<min)
{
for(j=;j<=;j++)
{
if(b[j]<=r&&b[j]<min)
{
f1++;
}
}
cout<<f<<':'<<f1<<endl;
zf1=zf1+f1;
f1=;
}
else
{
cout<<<<':'<<<<endl;
}
min=;
min1=;
}
cout<<zf<<':'<<zf1;
return ;
}

这里用到了求最小值的方法,还可以改成sort排序后的[0]

C++枚举算法的更多相关文章

  1. 枚举算法总结 coming~^.*

    感谢CJ同学监督╭(╯^╰)╮.从放假到现在都木有更新博客了~噶呜~小娘谨记教诲,每天会更新博客==!! 看了一下POJ训练计划,虽然已经零零散散做了40多道题了,还是从头开始整理一下漏掉的知识点.T ...

  2. 【枚举Day1】20170529-2枚举算法专题练习 题目

    20170529-2枚举算法专题练习 题解: http://www.cnblogs.com/ljc20020730/p/6918360.html 青岛二中日期 序号 题目名称 输入文件名 输出文件名 ...

  3. 利用枚举算法实现todoList:把对应项添加的内容列表

    功能: 点击城市列表项,如果内容列表不存在,则插入点击项: 如果内容列表中已存在,则不插入,然后把内容列表中的对应项放到第一位. HTML代码: <!DOCTYPE html> <h ...

  4. 【枚举Day1】20170529-2枚举算法专题练习 题解

    题目: http://www.cnblogs.com/ljc20020730/p/6918328.html 评测器:cena 评测记录: 1.OneMoreRectangle 一个矩形 ●如果任意枚举 ...

  5. poj2814-拨钟问题-C语言-枚举算法

    #include <stdio.h> #include <stdlib.h> /* 首先,我们考虑用长度为9的数组表示表盘的状态以及调表的操作,终止的条件是表盘状态数组所有元素 ...

  6. jszs 枚举算法

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 数据结构与算法之枚举(穷举)法 C++实现

    枚举法的本质就是从全部候选答案中去搜索正确的解,使用该算法须要满足两个条件: 1.能够先确定候选答案的数量. 2.候选答案的范围在求解之前必须是一个确定的集合. 枚举是最简单.最基础.也是最没效率的算 ...

  8. flink 实现三角枚举EnumTriangles算法详解

    1.三角枚举,从所有无向边对中找到相互连接的三角形 /** * @Author: xu.dm * @Date: 2019/7/4 21:31 * @Description: 三角枚举算法 * 三角枚举 ...

  9. 『高次同余方程 Baby Step Giant Step算法』

    高次同余方程 一般来说,高次同余方程分\(a^x \equiv b(mod\ p)\)和\(x^a \equiv b(mod\ p)\)两种,其中后者的难度较大,本片博客仅将介绍第一类方程的解决方法. ...

随机推荐

  1. Swagger2在DBA Service中生成RESTful API的实践

    目的与背景: 目的:对外暴露DBA Service必要的RESTful API,形成规整的API文档 背景:DBA Service后端采用Spring-boot,属于Spring家族,故生成API的工 ...

  2. laravel中间件的创建思路分析

    网上有很多解析laravel中间件的实现原理,但是不知道有没有读者在读的时候不明白,作者是怎么想到要用array_reduce函数的? 本文从自己的角度出发,模拟了如果我是作者,我是怎么实现这个中间件 ...

  3. fastai 官方教程之查看数据

    本文为fastai官方教程编译版本.若有错误,欢迎指正. 总目录: *查看数据:本节为初级教程,介绍怎样快速的查看你的数据和模型预测结果.* 推理学习器(Inference Learner):本节为中 ...

  4. PIGS POJ - 1149网络流(最短增广路---广搜) + 建图

    题意: 第一行输入m和n,m是猪圈的数量,n是顾客的数量,下面n行 第 i+1行表示第i个顾客 , 输入第一个数字表示有几把猪圈的钥匙,后面输入对应的猪圈,最后一个数字输入顾客想买几头猪. 建图: 设 ...

  5. 编译原理:DFA最小化,语法分析初步

    1.将DFA最小化:教材P65 第9题   解析: 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 解析: S→ 0A|1B →S → 0(1S|1)|1(0S|0 ...

  6. thinkphp5源码剖析系列1-类的自动加载机制

    前言 tp5想必大家都不陌生,但是大部分人都停留在应用的层面,我将开启系列随笔,深入剖析tp5源码,以供大家顺利进阶.本章将从类的自动加载讲起,自动加载是tp框架的灵魂所在,也是成熟php框架的必备功 ...

  7. [React]核心概念

    本文是对React文档:核心概念部分的笔记,内容大致与文档相同. 文档链接 React哲学部分写的很好,务必要看 JSX JSX是JS的语法扩展,配合react使用,为JS和HTML的混写 JSX支持 ...

  8. Reactor模式和Proactor模式

    Reactor 主线程往epoll内核事件表中注册socket上的读就绪事件 主线程调用epoll_wait等待socket上有数据可读 当socket上有数据可读时,epoll_wait通知主线程, ...

  9. AI+BI的未来

    ​​ 术语与缩写解释 缩写.术语 解 释 BI 商业智能(Business Intelligence,简称:BI),又称商业智慧或商务智能,指用现代数据仓库技术.线上分析处理技术.数据挖掘和数据展现技 ...

  10. Hadoop调试记录(1)

    错误 ERROR: Can't get master address from ZooKeeper; znode data == null 解决 关闭hadoop,发现stop-all.sh后几个进程 ...