题目描述:

样例:

实现解释:

一道看似复杂但实际既是斐波那契变形的题目

知识点:递推,斐波那契

通过问题的描述,可以得到以下规律:(除了座位数为一时)男生坐最后时,倒数第二个一定是女生;女生坐最后,倒数第二个均可。转化:i个位置时男生结尾的情况数等于i-1个位置时女生结尾的情况数,i个位置时女生结尾的情况数等于i-1个位置时的总情况数。

于是便可得出两种解决方案:斐波那契变形和直接循环递推

斐波那契变形:

i位置男生结尾的情况 = i-1位置女生结尾情况数 = i-2位置总情况数

i位置女生结尾的情况 = i-1位置总情况数

则有num(i) = num(i-1)+num(i-2); num(1) = 2; num(0) = 1;

编写递归程序即可。

直接循环递推:

直接按转化后的递推关系编写程序即可:利用temp储存前一次男生结尾情况,男生结尾数 = 前一次的女生结尾数,女生结尾数 = 前一次女生结尾数加上存储好的前一次男生结尾数即可。

最后的代码还包括一个没事儿干的时候进行代码缩减后的递推代码,省去了temp变量。

坑点:

斐波那契方法时注意特殊值0和1的判断输出

递推方法时注意两种选择情况的重置

完整代码:

斐波那契变形:

//斐波那契变形 直接斐波那契
#include<iostream>
using namespace std;
int fi(int n)
{
if(n == 0) return 1;
if(n == 1) return 2;
return fi(n-1)+fi(n-2);
}
int main()
{
ios::sync_with_stdio(false);
int n;
while(cin >> n)
{
cout << fi(n) << '\n';
}
return 0;
}

  

直接循环递推:

#include<iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int n;
long long temp,choiceMan,choiceWoman;
//分别为中间值,男生坐最后的情况总数,女生坐最后的情况总数
while(cin >> n)
{
//一个座位时,男女最后的情况分别为1
choiceMan = choiceWoman = 1;
for(int i = 1;i<n;i++)
{
//记录
temp = choiceMan;
//座位增多后,男生只能坐在女生结尾的座位后
choiceMan = choiceWoman;
//女生可以女生最后也可以男生最后,求和
choiceWoman += temp;
//注意交换赋值的顺序
}
cout << choiceMan+choiceWoman << endl;
}
return 0;
}

  

无聊压缩代码:

#include<cstdio>
int main()
{
int n,m,w;
while(~scanf("%d",&n))
{
m=w=1;
while(n-->1)
{
w+=m;
m=w-m;
}
printf("%d\n",m+w);
}
}

  

题解:2018级算法第二次上机 Zexal的排座位的更多相关文章

  1. 题解:2018级算法第二次上机 Zexal的流水线问题

    题目描述: 样例: 实现解释: 最基础的流水线调度问题,甚至没有开始和结束的值 实现方法即得出状态转移方程后完善即可,设a[][i]存储着第一二条线上各家的时间花费,t[][i]存储着i处进行线路切换 ...

  2. 题解:2018级算法第二次上机 Zexal的竞赛

    题目描述: 样例: 实现解释: 一道需要一点思考的动态规划题目 知识点:动态规划,数据记录 首先将题目描述调整:分别输入不同分数的题目总分(便于后续计算),当获得了i分数的总分后无法获得i-1和i+1 ...

  3. 2016级算法第二次上机-G.ModricWang's Real QuickSort

    873 思路 这是一道非常基础的题,目的是帮助大家回顾快排相关的知识.大家完成此题之后应该就对快排有比较深刻的印象了. 对于整个快排的流程,题目描述中已经给了清晰完整的伪代码.需要自己加工的部分就是, ...

  4. 2016级算法第二次上机-F.ModricWang's Number Theory II

    891 ModricWang's Number Theory II 思路 使得序列的最大公约数不为1,就是大于等于2,就是找到一个大于等于2的数,它能够整除序列中的所有数. 考虑使得一个数d整除数组中 ...

  5. 2016级算法第二次上机-E.AlvinZH的儿时梦想——运动员篇

    862-AlvinZH的儿时梦想--运动员篇 思路 难题. 应该想到,不管给出的数据如何,每一个淘汰的人不会对最终答案产生任何影响,所以每次淘汰就把人除掉就可以了,最后剩下的两个人计算它们从开始到相遇 ...

  6. 2016级算法第二次上机-D.Bamboo的饼干

    Bamboo的饼干 分析 从两个数组中各取一个数,使两者相加等于给定值.要注意去重和排序 难度不大,方法很多,基本只要不大于O(n^2 ) 的都可以过.本意想考察二分搜索 还可以借助stl中的map, ...

  7. 2016级算法第二次上机-C.AlvinZH的儿时梦想——坦克篇

    872 AlvinZH的儿时梦想----坦克篇 思路 简单题.仔细看题,题目意在找到直线穿过的矩形数最小,不能从两边穿过.那么我们只要知道每一行矩形之间的空隙位置就可以了. 如果这里用二维数组记住每一 ...

  8. 2016级算法第二次上机-B.Bamboo的OS实验

    Bamboo的OS实验 分析 首先理解题意,要完成不同数量的不同命令,但是完成相同的命令之间必须有n个间隔,为使得时间最短,自然优先用其他命令来填充这n分钟的时间,由于数量少的命令可以用来填充空隙,所 ...

  9. 2016级算法第二次上机-A.画个圈圈诅咒你

    890 画个圈圈诅咒你 思路 简单题.题目中的圆并没有什么实际作用,简化成线段重合问题会更好理解些. 暴力解法:使用双重for循环会T到想哭,记住最直接的方法一般是过不了题的. 解法一:二分查找.空间 ...

随机推荐

  1. 如何将H5一键部署到托管服务中

    随着各个大型App都推出了自己的小游戏平台,游戏也越来越受到开发者的关注.Cocos Creator是一个完整的游戏开发解决方案,包含了轻量高效的跨平台游戏引擎,以及能让你更快速开发游戏所需要的各种图 ...

  2. EAS:基于网络转换的神经网络结构搜索 | AAAI 2018

    论文提出经济实惠且高效的神经网络结构搜索算法EAS,使用RL agent作为meta-controller,学习通过网络变换进行结构空间探索.从指定的网络开始,通过function-preservin ...

  3. ScrollView嵌套ConstraintLayout导致最后一项显示不全

    原因:scrollView不受ConstraintLayout的约束布局影响 解决方法: 保持scrollview的宽高为0dp,设置其相对ConstraintLayout相对约束 <andro ...

  4. Homebrew命令总结

    brew又叫homebrew,是macos上的一个包管理工具,能够在mac中方便的进行包管理,类似于ubuntu系统下的apt-get,记得自己第一次接触brew是为了在mac上安装一个独立绿色的视频 ...

  5. 使用Python解密仿射密码

    新学期有一门密码学课,课上老师布置了一道密码学题,题目如下: 解密由仿射密码加密的密文“DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS” 想解密这个密文,首先必须要知道仿 ...

  6. SSH网上商城四

    第29课:10-SSH网上商城:购物模块的实体的封装 1.现在我们要实现购物车的模块,当用户在点击 加入购物车按钮的时候需要跳转到 上面我们需要对购物车的对象进行封装 上面一个商品就对应一个记录项,购 ...

  7. Docker 基础知识 - Docker 概述

    Docker 是一个开发.发布和运行应用程序的开放平台.Docker使您能够将应用程序与基础架构分离,以便快速交付软件.有了 Docker,你可以像管理应用程序一样管理你的基础设施.通过利用 Dock ...

  8. [javascript]js原型链以及原型链继承

    基础的三个要素: 函数 ,函数实例,实例原型. 实例原型相当于 父类, 函数相当于构造函数 举例: class Fn extends Fn.prototype{ } 实例: let f = new F ...

  9. js事件入门(3)

    3.键盘事件 3.1.onkeydown 键盘按下事件 当键盘按下的时候触发 <!DOCTYPE html> <html> <head> <meta char ...

  10. Double值保留两位小数的四种方法

    public class DoubleTest { //保留两位小数第三位如果大于4会进一位(四舍五入) double f = 6.23556; /** *使用精确小数BigDecimal */ pu ...