当前位置: 首页 > wzjs >正文

本溪兼职网站建设招聘简洁公司网站源码

本溪兼职网站建设招聘,简洁公司网站源码,免费制作网站的步骤 怎样做网站,德州软件开发公司信息学奥赛一本通(C版)在线评测系统 基础算法 第一节 动态规划的基本模型 1286:怪盗基德的滑翔翼 1. 理解题意 同学们,我们一起来看怪盗基德遇到的这个有趣问题哦。怪盗基德成功偷到了钻石,可倒霉的是他的滑翔翼动力装…

信息学奥赛一本通(C++版)在线评测系统
基础算法 第一节 动态规划的基本模型
1286:怪盗基德的滑翔翼


1. 理解题意

同学们,我们一起来看怪盗基德遇到的这个有趣问题哦。怪盗基德成功偷到了钻石,可倒霉的是他的滑翔翼动力装置被柯南破坏了。现在他在一个城市里,这个城市有一排建筑,一共有 N 幢,而且每幢建筑的高度都不一样呢。

基德可以从这一排建筑中的任意一幢的顶部开始他的逃跑旅程哦。不过他有两个限制条件:一是他只能朝着一个方向逃跑,而且在逃跑过程中不能改变方向;二是因为滑翔翼坏了,他只能从高的建筑滑到低的建筑。

那我们要做的就是算一算,在这些条件的限制下,基德最多能经过多少幢不同建筑的顶部呢,这里面可是包含他一开始所在的那幢建筑哟。比如说,题目给了我们一些建筑的高度数据,像 30020715529929817015865,我们就要找出基德按照规则能经过的最多建筑数量。而且呀,题目中会给出好多组这样的建筑高度数据,我们都要一一算出答案呢。

2. 解题思路

那我们怎么来解决这个问题呢?其实呀,因为基德可以从左往右滑,也可以从右往左滑,所以我们要分别计算这两种情况下他能经过的最多建筑数量,然后取这两个结果里面较大的那个,就是基德最多能经过的建筑数量啦。

那怎么计算从左往右滑时能经过的最多建筑数量呢?我们可以从第一幢建筑开始,依次往后看每一幢建筑。对于每一幢建筑,我们看看它前面的建筑中,哪些比它高。然后记录下从那些比它高的建筑滑到当前建筑时,能经过的最多建筑数量,取其中的最大值再加 1(加上当前建筑本身),这样就能得到以当前建筑为终点时能经过的最多建筑数量啦。

从右往左滑的情况和从左往右滑是差不多的,只是方向反了过来,从最后一幢建筑开始往前看。最后把从左往右滑和从右往左滑得到的最多建筑数量进行比较,大的那个就是我们要的答案哦。

3. 解题步骤

  1. 输入测试数据组数:首先,我们要输入一个整数 k,这个 k 表示题目中会给我们 k 组不同的建筑高度数据哦。
  2. 对于每组测试数据
    • 输入建筑数量:输入一个整数 n,它代表这一组数据里有 n 幢建筑。
    • 输入建筑高度:接着输入 n 个不同的整数,这些整数就代表每幢建筑的高度啦,我们把它们存到一个数组 h 里。
    • 计算从左往右滑的最多建筑数量:我们先创建一个数组 ltr(表示从左到右),用来存储以每幢建筑为终点时能经过的最多建筑数量,一开始把数组里的每个数都设为 1(因为每幢建筑本身就算是经过了 1 幢建筑)。然后从第二幢建筑开始,对于每幢建筑,我们去看它前面的建筑,如果前面的建筑比它高,我们就更新当前建筑能经过的最多建筑数量(取当前值和前面建筑能经过的最多建筑数量加 1 里面较大的那个)。
    • 计算从右往左滑的最多建筑数量:和从左往右滑的做法差不多哦,我们再创建一个数组 rtl(表示从右到左),从最后一幢建筑开始往前看,同样的,如果后面的建筑比当前建筑高,就更新当前建筑能经过的最多建筑数量。
    • 比较并输出结果:最后我们比较从左往右滑和从右往左滑得到的最多建筑数量,把大的那个数输出,这就是基德在这一组建筑高度数据下最多能经过的建筑数量啦。

4. C++代码实现

#include <iostream> // 包含输入输出流的头文件,这样我们就能输入和输出数据啦
using namespace std; int main() {int k; // 定义变量k,用来存储测试数据的组数cin >> k; // 从键盘输入测试数据的组数kwhile (k--) { // 对于每一组测试数据int n; // 定义变量n,用来存储这组数据中建筑的数量cin >> n; // 从键盘输入建筑的数量nint h[105]; // 定义数组h,用来存储建筑的高度,105是为了防止越界for (int i = 0; i < n; i++) { // 循环输入每幢建筑的高度cin >> h[i]; // 把输入的高度存到数组h里}int ltr[105] = {1}; // 定义数组ltr,存储从左往右滑时以每幢建筑为终点的最多建筑数量,初始值设为1for (int i = 1; i < n; i++) { // 从第二幢建筑开始计算ltr[i] = 1; // 先把当前建筑能经过的最多建筑数量设为1for (int j = 0; j < i; j++) { // 看当前建筑前面的建筑if (h[j] > h[i]) { // 如果前面的建筑比当前建筑高ltr[i] = max(ltr[i], ltr[j] + 1); // 更新当前建筑能经过的最多建筑数量}}}int rtl[105] = {1}; // 定义数组rtl,存储从右往左滑时以每幢建筑为终点的最多建筑数量,初始值设为1for (int i = n - 1; i >= 0; i--) { // 从最后一幢建筑开始计算rtl[i] = 1; // 先把当前建筑能经过的最多建筑数量设为1for (int j = n - 1; j > i; j--) { // 看当前建筑后面的建筑if (h[j] > h[i]) { // 如果后面的建筑比当前建筑高rtl[i] = max(rtl[i], rtl[j] + 1); // 更新当前建筑能经过的最多建筑数量}}}int ans = 0; // 定义变量ans,用来存储最多能经过的建筑数量,初始值设为0for (int i = 0; i < n; i++) { // 遍历所有建筑ans = max(ans, max(ltr[i], rtl[i])); // 比较并更新最多能经过的建筑数量}cout << ans << endl; // 输出最多能经过的建筑数量}return 0;
}

5. 知识点总结

  1. 数组的使用:我们用了几个数组,像 h 数组用来存建筑的高度,ltr 数组存从左往右滑时以每幢建筑为终点的最多建筑数量,rtl 数组存从右往左滑时以每幢建筑为终点的最多建筑数量。数组就像是一排小格子,我们可以把好多相关的数据一个一个地放进去,方便我们后面使用。
  2. 循环结构:这里用了好多层循环哦。最外层的 while 循环用来处理多组测试数据,里面的 for 循环,有的用来输入建筑高度,有的用来计算从左往右和从右往左滑时的最多建筑数量。循环能让我们重复做一些事情,直到满足一定的条件。
  3. 条件判断:在循环里面,我们用 if 语句来判断前面或者后面的建筑是不是比当前建筑高。根据判断的结果,我们就可以决定要不要更新当前建筑能经过的最多建筑数量。条件判断能让我们的程序根据不同的情况做不同的事情。
  4. 求最大值:我们用 max 函数来比较不同情况下的最多建筑数量,找到其中最大的那个。这样我们就能得到怪盗基德最多能经过的建筑数量啦。
  5. 逻辑思维:解决这个问题的时候,我们要想清楚基德可以从两个方向滑,还要分别计算这两个方向能经过的最多建筑数量,最后再比较取大的。这锻炼了我们的逻辑思维能力,让我们学会把一个复杂的问题分成几个小步骤来解决。

文章转载自:

http://TyNuKSyv.cgdyx.cn
http://Tf4Wt2d9.cgdyx.cn
http://pXWQjg3w.cgdyx.cn
http://STMwIeWa.cgdyx.cn
http://PHm3SnJw.cgdyx.cn
http://JUiQ9eAK.cgdyx.cn
http://3vx43YVp.cgdyx.cn
http://Qjj8X49v.cgdyx.cn
http://piuYnCau.cgdyx.cn
http://oCECleD9.cgdyx.cn
http://OuU683QO.cgdyx.cn
http://wksptIzK.cgdyx.cn
http://6uUjpsUv.cgdyx.cn
http://kqo6QRmG.cgdyx.cn
http://k9hDF1bD.cgdyx.cn
http://jQBiUSsp.cgdyx.cn
http://0tMfCHRt.cgdyx.cn
http://eenBnbyS.cgdyx.cn
http://dvCf0J3b.cgdyx.cn
http://WwBxdceZ.cgdyx.cn
http://zg0mqVCU.cgdyx.cn
http://kheZ38qA.cgdyx.cn
http://v94FjpsA.cgdyx.cn
http://NXjp5Gb0.cgdyx.cn
http://7cjIKkS5.cgdyx.cn
http://VvthJkno.cgdyx.cn
http://RUT7jJpm.cgdyx.cn
http://PMr9V1sW.cgdyx.cn
http://N93cFljM.cgdyx.cn
http://9ydI8QUa.cgdyx.cn
http://www.dtcms.com/wzjs/655718.html

相关文章:

  • 河北先进网站建设风格50个最火的创业小项目
  • 移动端模板网站建设价格卸载 wordpress
  • 聊城大型门户网站建设中山seo网络推广
  • 上海域名icp海网站建设做网上竞彩网站合法吗
  • 怎么样做门户网站平板室内装修设计软件
  • 机关网站机制建设情况做网站和商城有什么好处
  • 做网站百度收费吗做网站要用到哪些技术
  • 稳定的网站制作需要多少钱服装搭配网站源码
  • 小店怎么做网站策划案网站构成怎么写
  • 做漂亮的网站wordpress 手机电脑
  • 整站关键词快速排名第一次打开wordpress白
  • 网站开发用户需求说明书wordpress企业站主题哪个好
  • 做网站需要买网址吗网站优化外包顾问
  • wordpress的网站国内网网站建设佰首选金手指十六
  • 网站建设重要新怎么做页游网站运营
  • 如何建立营销性企业网站论文网站备案没有固定电话
  • 网站未备案wordpress链接平台优化是什么意思
  • 教育网站赏析网站开发规划方案
  • 如何做h5商城网站中交路桥建设有限公司招聘
  • 阜阳网站建设管理咨询公司经营范围包括哪些
  • 淄博免费建站wordpress自定义post
  • 贵阳做网站开发科技有限公司wordpress不显示引用图片不显示
  • 京东网站的建设目的百度热度
  • 网站域名注册地址网页设计与制作课程思政建设内容
  • 网站title重复的后果建设网站具体步骤
  • 淘客网站开发视频教程英文网站设计理念
  • 网站更改域名陕西省建设网三类人员题库
  • html5个人网站源码阿里企业邮箱收费标准一年多少钱
  • 网站首页开发介绍好看的电影网站模板免费下载
  • 济南网站开发建设网站打开是404错误