算法:枚举

枚举法又称穷举法或列举法。其基本思想是按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举过程中,检验每个可能解是否为问题的解。这也是一种“筛选”,对于列举的可能解,既不能遗漏也不能重复。

使用枚举法,主要把握两个方面确定搜索范围,这个范围必须是有限的。②选择搜索策略,如何枚举,按照一条什么样的路线来逐一枚举。

问题 D: 猴子摘桃

时间限制: 1 Sec  内存限制: 64 MB
提交: 32  解决: 30
[提交][状态][讨论版]

题目描述

果园里种了很多桃树,当桃树开始结果的时候,猴子便会成群结队地前来摘桃。猴子们第一天会摘掉桃子的一半还多一个,第二天再摘第一天剩下的一半还多一个,以后每天均摘掉上一天剩下的一半还多一个,到第n天时,树上就只剩下两个桃子了。请问果园里原来共多少个桃子?

输入

输入一个正整数n(n<50),表示天数。

输出

输出果园里原来共有的桃子数。

样例输入

4

样例输出

30

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n,m;
 5     int i;
 6     scanf("%d",&n);
 7     if(n>0&&n<50)
 8     {
 9         for(i=n-1,m=2;i>=1;i--)
10         {
11             m=(m+1)*2;
12         }
13         printf("%d\n",m);
14     }
15     return 0;
16 }

时间: 2024-08-05 03:05:30

算法:枚举的相关文章

hdu5371 Hotaru&#39;s problem(manacher 算法+枚举)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5371 题目大意:给一串数字,在子串中找到"1-2-1"的形式,其中1和2 是回文串,找出最长的那一串. 思路:利用manacher算法得出最长序列.观察子串形式,1和2是回文串,其实2和后面那个1也是回文串. 在之前我们已经通过manacher算法得到了每个数字所能延伸的长度,所以我们只要枚举第二段到第三段的距离即可. 当遇到第i个数字时,那么第二段和第三段的距离就是i+p[i],令j=i

算法--枚举策略

注:转载请注明:http://www.cnblogs.com/ECJTUACM-873284962/ 枚举法的基本思想 枚举法的基本思想是根据提出的问题枚举所有可能状态,并用问题给定的条件检验哪些是需要的,哪些是不需要的.能使命题成立,即为其解. 枚举结构:循环+判断语句. 枚举法的条件 虽然枚举法本质上属于搜索策略,但是它与后面讲的回溯法有所不同.因为适用枚举法求解的问题必须满足两个条件: ⑴可预先确定每个状态的元素个数n: ⑵状态元素a1,a2,-,an的可能值为一个连续的值域. 枚举法的框

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

枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件: 1.可以先确定候选答案的数量: 2.候选答案的范围在求解之前必须是一个确定的集合. 枚举是最简单,最基础,也是最没效率的算法 枚举法优点: 1.枚举有超级无敌准确性,只要时间足够,正确的枚举得出的结论是绝对正确的. 2.枚举拥有天下第一全面性,因为它是对所有方案的全面搜索,所以,它能够得出所有的解. 程序优化: 对于枚举算法,加强约束条件,缩小枚举的范围,是程序优化的主要考虑方向. 百钱买百鸡: 代码: #includ

算法经典文章收藏

作者 标题 archimedes MapReduce实战--倒排索引 - codingwu - 博客园 archimedes MapReduce原理与设计思想 - codingwu - 博客园 archimedes 算法--递推策略 - codingwu - 博客园 archimedes 动态规划算法 - codingwu - 博客园 archimedes 字符串匹配--暴力搜索算法 - codingwu - 博客园 archimedes 算法--枚举策略 - codingwu - 博客园 ar

算法艺术与信息学竞赛书摘

<算法艺术与信息学竞赛>这本书我详细看了1.1.1.2.1.3,之后就看得不是很懂了,所以还是把摘要写出来,方便让我知道到底能学到什么. 第一章 算法与数据结构 “数据结构+算法=程序设计” 从理论分析和实际应用两方面阐述了算法与数据结构的基本知识. 1.1 概括的叙述了算法.数据结构.以及计算理论的一些概念. 1.2从实例出发,概括的介绍了一些基本算法,包括美剧.贪心.递归.递推. 1.3介绍基本数据结构,包括线性表队列.栈.树.二叉树.以及图遍历与拓扑排序. 1.4介绍了一些实用数据结构,

算法--递归策略

本文地址:http://www.cnblogs.com/archimedes/p/algorithm-recursion.html,转载请注明源地址. 递归的概念与基本思想 一个函数.过程.概念或数学结构,如果在其定义或说明内部又直接或间接地出现有其本身的引用,则称它们是递归的或者是递归定义的.在程序设计中,过程或函数直接或者间接调用自己,就被称为递归调用. 递归的实现方法 递归是借助于一个递归工作栈来实现:递归=递推+回归: 递推:问题向一极推进,这一过程叫做递推:这一过程相当于压栈. 回归:

Miller_Rabin素数测试算法模板对比

昨天在USACO做了一道判断素数的题,就想着学习一下Miller_Rabin素数测试算法,在网上找到两种模版,第一种十分简洁,运行速度也很快,但是会判错极少的几个非素数:第二种比较麻烦,运行速度很慢,所以我便想找到第一种模版不能判断的非素数特判一下,结果用了一天,电脑只找到10^8以下的,10^9内还有2个没找到,但正确的模版运行速度太慢,我的电脑又太渣,耗不起时间了,姑且先这样,等以后有深入理解有更好的方法再更新一下. 第一种:源自吉林大学ACM模版 刚开始用的是随机数测试,我想到以前了解过只

用二分枚举答案题

以二分算法枚举答案的方法非常高效,枚举所需的时间复杂度只需O(logN) 设x为答案,check(x)只有真假两种取值. 能够使用二分枚举算法的条件: 存在一个X,当x小于X时和x大于X时,check(x)真假值不一样. 二分枚举即能够找出真假之间的边界,这个就是所求在满足题意下的最值了. 如果x是浮点数,那么边界的取值注意精度即可. const double eps=1e-7; while(l+eps<r) { mid=(l+r)/2; if(check(mid)) l=mid; else r

JVM(四)垃圾回收的实现算法和执行细节

全文共 1890 个字,读完大约需要 6 分钟. 上一篇我们讲了垃圾标记的一些实现细节和经典算法,而本文将系统的讲解一下垃圾回收的经典算法,和Hotspot虚拟机执行垃圾回收的一些实现细节,比如安全点和安全区域等. 因为各个平台的虚拟机操作内存的方法各不相同,且牵扯大量的程序实现细节,所以本文不会过多的讨论算法的具体实现,只会介绍几种算法思想及发展过程. 垃圾回收算法 1.标记-清除算法 标记-清除算法是最基础的算法,像它的名字一样算法分为"标记"和"清除"两个阶段

算法竞赛经典例题

村庄债务问题 有一个村庄,村里有n户人家,他们整整齐齐地排成一列,编号从左向右依次是1~n 他们当中,有的欠别人钱,有的则被别人欠钱.今天,村委会决定统一处理这些债务. 然而这个村庄有一个神奇的特性,钱只能在相邻的人家之间流动,也就是说对于第i户,他的钱只能给第i-1户或第i+1户 如果1欠了3的钱,则必须先把钱给2,再由2给3 现在村委会想知道,他们至少需要多少次付钱的操作才能把所有债务问题解决. 输入 第一行,一个整数n 第二行n个整数,第i个数v[i]代表第i户人家的债务情况.正代表欠钱,