枚举就是列举出所有的可能性,然后从中选出想要的解。
1.火柴棒
题目描述
给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示:
注意:

加号与等号各自需要两根火柴棍

如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0)

n根火柴棍必须全部用上

输入格式
输入文件matches.in共一行,有一个整数n(n<=24)。

输出格式
输出文件matches.out共一行,表示能拼成的不同等式的数目。

样例数据
input

Input 1:
14

Input 2:
18
output

Output 1:
2

Output 2:
9
数据规模与约定
时间限制:1s1s
空间限制:256MB256MB

注释
【输入输出样例1解释】

2个等式为0+1=1和1+0=1。

【输入输出样例2解释】

9个等式为:

0+4=4

0+11=11

1+10=11

2+2=4

2+7=9

4+0=4

7+2=9

10+1=11

11+0=11
分析一下:
我们可以将许多组成后的数存到数组里,然后依次查询计算。
注意:
由于加号和等号各需两根火柴,所以我们最多可用24-2-2=20根。
所以最大加数为1111和1111。
我们可以来分解一下,

“1”需要2根。
“11”需要“1”+“1”=4根。
“111”需要“11”+“1”=4+2=6根。
所以摆n这个数所需的火柴数就等于a[n%10]+a[n/10]的和(n>=10)//a[i]记录的是摆“i”这个数字所需的火柴数。//代码如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen(“input.in”,“r”,stdin);
freopen(“output.out”,“w”,stdout);
int a[2222]={6,2,5,5,4,5,6,3,7,6};//给前九个数赋初值,并且数组要开到2222。预处理
int n,ans=0;
cin>>n;
n-=4;//预处理n
for(int i=10;i<=2222;i++)//预处理前2222个数
{
a[i]=a[i/10]+a[i%10];
}
for(int i=0;i<=1111;i++)
{
for(int j=0;j<=1111;j++)
{

     if(n-a[i]-a[j]==a[i+j])ans++;}
}
cout<<ans<<endl;
return 0;

}
2.牛式
题目描述
下面是一个乘法算式,但是所有的数字都看不见了。
如果一个 * 可以是任何一个数字,想必这个虫食算有相当多的解;
xxx
× xx

  x x x

x x x

x x x x
但如果一个 * 只能从给定集合中选取数字,那么这个虫食算有多少个解呢?

输入格式
从文件 alpha2.in 中读入数据。

第一行有一个正整数 nn,代表可选数字的个数。

第二行有 nn 个用空格隔开的数字,这些数字只能是 11 到 99 中的一个,并且它们互不相同。这些数字表示一个 * 可以代表的数字。

输出格式
输出到文件 alpha2.out 中。

仅一个数,表示总的方案数。

样例
样例输入
5
2 3 4 6 8
样例输出
1
样例解释
下面显示了该式子满足样例输入条件的唯一解。

2 2 2
× 2 2

4 4 4
4 4 4

4 8 8 4
数据范围与提示
50%数据:1≤n≤5

100% 数据:1≤n≤9

分析一下:
因为我们要从集合中选数,且每一位上的的数都必须是集合中的数。
所以我们可以开一个五重循环,模拟每一位上的情况。
细节:进位。//代码如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen(“alpha2.in”,“r”,stdin);
freopen(“alpha2.out”,“w”,stdout);
int n,s[11];
int x1,x2,x3,y1,y2,y3,z1,z2,z3,z4;
int ans=0;
bool f[11]={};
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s[i];
f[s[i]]=1;
}
for(int a=1;a<=n;a++)
{
for(int b=1;b<=n;b++)
{
for(int c=1;c<=n;c++)
{
for(int d=1;d<=n;d++)
{
for(int e=1;e<=n;e++)
{
x1=0;
x2=0;
x3=0;
y1=0;
y2=0;
y3=0;
z1=0;
z2=0;
z3=0;
z4=0;
x1+=s[e]*s[c];
if(x1>=10)
{
x2+=x1/10;
x1%=10;
}
x2+=s[e]*s[b];
if(x2>=10)
{
x3+=x2/10;
x2%=10;
}
x3+=s[e]*s[a];
if(x3>=10)
{
continue;
}

                 y1+=s[d]*s[c];if(y1>=10){y2+=y1/10;y1%=10;}y2+=s[d]*s[b];if(y2>=10){y3+=y2/10;y2%=10;}y3+=s[d]*s[a];if(y3>=10){continue;}z1+=x1;z2+=x2+y1;if(z2>=10){z3+=z2/10;z2%=10;}z3+=x3+y2;if(z3>=10){z4+=z3/10;z3%=10;}z4+=y3;if(z4>=10)continue;if(f[x1] && f[x2] && f[x3] && f[y1] && f[y2] && f[y3] && f[z1] && f[z2] && f[z3] && f[z4])ans++;}}}}
}
cout<<ans<<endl;
return 0;

}
3.连续累加加
题目描述
给你一个整数N和长度L, 现在要求你找X个连续的非负整数,使得它们的和是N, 同时要满足 X >= L, 你的任务是使得X最小,输出这连续的X个整数。

如果找不到这样的连续整数或者能找到但X > 100, 那么你输出-1。 也就是能找到满足题意的连续整数,且X < =100时,才输出这连续的X个非负整数。

输入格式
一行:两个整数: N 、L. 1 <= N <=10^9, 2 <= L <= 100.

输出格式
如果找到合法的连续整数,把它们从小到大输出,每行一个整数。 否则输出-1。

样例数据
input

18 2
output

5
6
7
数据规模与约定
经典题目

时间限制:1texts1texts
空间限制:256textMB

分析一下:
连续的几个数的求和公式为:
a+(a+1)+(a+2)+(a+3)+(a+4)+…+(a+n)=((a+(a+n))(n+1))/2。
所以2N=(a+a+n)(n+1)
所以2N/(n+1)=a+a+(n+1-1)
所以2N/(n+1)-(n+1)+1=2a
a的值就能求出来了!
注意:
a为连续数最开始的数,数列的长度为(n+1)//代码如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen(“sum.in”,“r”,stdin);
freopen(“sum.out”,“w”,stdout);
int x,n,l;
cin>>n>>l;
int len;
for(int len=l;len<=100;len++)
{
if(n
2%len0)
{
if((n*2/len-len+1)%20)
{
int dev=0;
for(int i=(n*2/len-len+1)/2;;i++)
{
if(dev==len)
return 0;
cout<<i<<endl;
dev++;
}
}
}
}
cout<<"-1"<<endl;
return 0;
}
4.最大连续和
题目描述
给定N个数,求这N(1 <=N <= 100,000) 个数的某个连续子序列的累加和,保证这个连续子序列的累加和最大。

输入格式
第一行:一个整数N。(1 <=N <= 100,000) 接下来N行,每行一个整数P_i(-1,000 <= P_i <= 1,000)。表示第i个数。

输出格式
一个整数,表示子序列的最大连续累加和。

样例数据
input

7
-3
4
9
-2
-5
8
-3
output

14
数据规模与约定
20% 数据保证 n≤20n≤
60%数据保证 n≤5000
100% 数据保证 n≤100000
时间限制:1s1s
空间限制:256MB256MB
注释
(4, 9, -2, -5, 8) => 14. 子序列不能为空!!

本人认为此题老刘的算法很妙。
因为这题的n的数据范围较大
正常的解法肯定会超时
分析一下:
既然我们不能用一般的解法,那就要另辟蹊径。
我们想一下,如果一个数为负数,那么它对数列的影响就是负面的,我们就应该直接放弃。还应该用一个变量来记录一下最大值。//代码如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen(“profits.in”,“r”,stdin);
freopen(“profits.out”,“w”,stdout);
int a[100001];
int n;
cin>>n;
int ans=0;
int sum=-100000;//用来记录
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)//一重循环即可
{
ans+=a[i];//加上这个数
if(ans>sum)//记录这个数
sum=ans;
if(ans<0)//已经小于0了,舍弃
ans=0;//重新赋值
}
cout<<sum<<endl;//输出最大值
return 0;
}

枚举与模拟总结--常梓良相关推荐

  1. jdk1.5新特性5之枚举之模拟枚举类型

    一 简单应用 package cn.xy.Enum; public enum TrafficLamp {  RED,GREEN,YELLOW; } TrafficLamp red = TrafficL ...

  2. CSP认证201509-2 日期计算[C++题解]:枚举、模拟

    题目分析 来源:acwing 分析: 主要是判断2月多少天.然后就是遍历每个月,依次减去当前月的天数,发现days还剩多少天就是当月几号. 其实这里是背的模板,日期题模板更难一点的题目是 CSP认证 ...

  3. PTA枚举和模拟类型八道题型

    目录 1.枚举-全排列 2.模拟-(3n+1)猜想 3.枚举-笨拙的手指 4.枚举-求质数的个数 5.枚举-最长不重复子序列 6.模拟-代码运行时间 7.模拟-快乐划拳 8.模拟-快乐求导 1.枚举- ...

  4. 2022蓝桥杯学习——4.枚举、模拟与排序

    一.枚举 蓝桥杯真题 1.连号区间 题目描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在 1∼N 的某个排列中有多少个连号区间呢? 这里所说的连号区间的定义是: 如果区间 [L,R] 里的所有 ...

  5. 2019年第十届蓝桥杯国赛B组试题G-排列数-next_permutation枚举,模拟

    在一个排列中,一个折点是指排列中的一个元素,它同时小于两边的元素,或者同时大于两边的元素. 对于一个 1∼n 的排列,如果可以将这个排列中包含 t个折点,则它称为一个 t+1 单调序列. 例如,排列 ...

  6. [CSP冲刺班]CSP-J2021模拟赛#9

    !!!爆零警告 得分 凄凄惨惨戚戚 我上来浏览了一遍题目,觉得都挺简单的(事实证明我太年轻了),挑了我认为最简单的第二题开始做,做了半个小时,A掉了.然后做第二题,拿了部分分(无嵌套30分).第三题写 ...

  7. 【上海交大oj】畅畅的牙签袋(改)(枚举+模拟)

    1391. 畅畅的牙签袋(改) 题目描述 上次妄图遮掩显示器的企图失败了,所以畅畅很不开心.这次,他换了一种牙签袋卷土重来了.这次他选择了十字形的牙签袋(即每贴一个牙签袋都会影响5块区域,贴的时候中心 ...

  8. 备战蓝桥杯-枚举、排序、模拟专项练习详解(含有多道蓝桥杯原题)

    枚举.模拟与排序 蓝桥杯所有专项练习 蓝桥杯原题: 连号区间数 小明这些天一直在思考这样一个奇怪而有趣的问题: 在 1∼N1∼N 的某个排列中有多少个连号区间呢? 这里所说的连号区间的定义是: 如果区 ...

  9. 【每日训练】2020/11/8(规律 + 二进制、单调栈 + 前缀和,后缀和、bitset + 枚举)

    整理的算法模板合集: ACM模板 目录 1. NC 打铁的箱子(规律 + 二进制) 2. NC 最优屏障(单调栈 + 前缀和,后缀和) 3. CF993C Careful Maneuvering(bi ...

最新文章

  1. Scrum看板工具Leangoo脑图实现影响地图
  2. ssms2008 代码自动提示_使用 SSMS 的提示和技巧 - SQL Server Management Studio (SSMS) | Microsoft Docs...
  3. Docker运行操作系统环境(BusyBoxAlpineDebian/UbuntuCentOS/Fedora)
  4. 统计自己洛谷AC题目爬虫
  5. iOS 读书笔记 第一章
  6. C11中auto的使用
  7. opensuse 安装网易云音乐(tumbleweed)(leap)
  8. matlab神经网络工具箱
  9. es3,es5语法记要
  10. python sklearn逻辑回归 sgd和lr_LR逻辑回归模型的原理、公式推导、Python实现和应用...
  11. svm算法 最通俗易懂讲解
  12. 华为第十届 关灯计划
  13. 如何快速画好一张程序流程图
  14. 小米Note4、小米8、一加6刷机(三方rec+rom+root)
  15. SpringBoot中405异常
  16. 个人投资课 张潇雨_张潇雨:个人投资课(节选) 如今我们一说到选股大师,最先想到的就是股神巴菲特。但早在80年代,整个投资界最耀眼的明星不止巴菲特一个,还有被称作“对冲... - 雪球...
  17. python数据分析分析(8G)学习视频免费分享
  18. 深大自考计算机科学与技术资料,想自考深圳大学的计算机科学与技术专业,难吗?...
  19. Python识别验证码----谷歌reCapture 4*4验证码
  20. 对OpenGL学习的记录

热门文章

  1. b类 蚂蚁金服_蚂蚁金服面试经历
  2. java计算机毕业设计迎宾酒店管理系统录屏源程序+mysql+系统+lw文档+远程调试
  3. 为什么微波炉加热某些食物会爆炸?
  4. 最好用的录屏工具Bandicam (班迪录屏)
  5. Unidirectional TSP UVA - 116(多阶段决策+输出字典序最小的路径)
  6. Windows11开启IE浏览器
  7. 安徽大学计算机考研资料汇总
  8. unity 机械臂控制(一)
  9. 安装会声会影2018出现java_会声会影2018专业版安装教程
  10. 有哪些值得关注的AIGC细分方向?