蓝桥杯刷题-dp-线性dp(守望者的逃离,摆花,线段)

[NOIP 2007 普及组] 守望者的逃离

题目描述

恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。

守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。

为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。

守望者的跑步速度为 17m/s,以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在 1s 内移动 60m,不过每次使用闪烁法术都会消耗魔法值 10 点。守望者的魔法值恢复的速度为 4 点每秒,只有处在原地休息状态时才能恢复。

现在已知守望者的魔法初值 M,他所在的初始位置与岛的出口之间的距离 S,岛沉没的时间 T。你的任务是写一个程序帮助守望者计算如何在最短的时间内逃离荒岛,若不能逃出,则输出守望者在剩下的时间内能走的最远距离。

注意:守望者跑步、闪烁或休息活动均以秒为单位,且每次活动的持续时间为整数秒。距离的单位为米。

输入格式

输入数据共一行三个非负整数,分别表示 MST

输出格式

输出数据共两行。

第一行一个字符串 Yes 或 No,即守望者是否能逃离荒岛。

第二行包含一个整数。第一行为 Yes 时表示守望者逃离荒岛的最短时间;第一行为 No 时表示守望者能走的最远距离。

输入输出样例

输入

39 200 4

输出

No

197

分析:

利用了贪心的思想:

首先,闪烁技能花费10魔法,相当于2.5s可以移动60m,比跑步1s移动17米性价比高很多。所以第一个想法就是一直闪烁,但是毫无疑问,这样会遗漏很多情况:

-1:比如上面的样例,因为跑不出去我们需要得到一个最远的距离,但是我们只知道闪烁的话,就会闪烁3次后,在最后1s还在原地不动回蓝,导致我们的最后的距离是180,毫无疑问,最后1s我们需要跑步的,而不是在原地等待,回蓝。

-2:比如下面的样例:
蓝:20 ,距离:121 时间:5

如果我们只知道使用闪烁,那么我们跑动的距离就是 60-120-120-120-180,我们会在最后1s到达,但是这哦肯定不是最优解,因为在第3s我们可以跑步就能到达终点。所以单纯的贪心不行


现在,我们假设有两个人同时在跑,有一个人很执着,他只知道使用闪烁。另外一个人是一个能时间回溯的人,他可以回到前几秒的时间,但是他一般来说只会向前跑,但是当他被第一个人超过之后,他就会回溯到前1s,学习第一个人的选择,进行闪烁,下面我们就用样例举一个例子:

代码:

#include<bits/stdc++.h>

using namespace std;

int m,s,t,first,second;

int main(){

        cin>>m>>s>>t;

        for(int i=1;i<=t;i++){

              if(m>=10)m-=10,first+=60,second+=17;//能闪烁直接闪烁

              else{  //不能闪烁

                            if(first>second)second=first;

                            m+=4,second+=17;//如果第一个人更快,第二个人学习第一个人,然后再跑       

                    }

               if(max(first,second)>=s){     //如果能到,就输出到了            

                      printf("Yes\n%d\n",i);return 0;

               }

        }

        cout<<"No"<<endl<<max(first,second)<<endl;//到不了输出距离

        return 0;

}

[NOIP 2012 普及组] 摆花

题目描述

小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 n 种花,从 1 到 n 标号。为了在门口展出更多种花,规定第 i 种花不能超过 ai​ 盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。

试编程计算,一共有多少种不同的摆花方案。

输入格式

第一行包含两个正整数 n 和 m,中间用一个空格隔开。

第二行有 n 个整数,每两个整数之间用一个空格隔开,依次表示 a1​,a2​,⋯,an​。

输出格式

一个整数,表示有多少种方案。注意:因为方案数可能很多,请输出方案数对 106+7 取模的结果。

输入输出样例

输入

2 4

3 2

输出

2

分析:

这是一道简单的0-1背包问题,下面使用了前缀和来优化我们能够选择的体积,同时也是用了滚动数组,将第一维消灭掉了

代码:
 

#include <bits/stdc++.h>

using namespace std;

const int MOD=1e6+7;

const int N=110;

int f[N]={0};

int a[N]={0};

int main(){

    int n,m;

    cin>>n>>m;

    f[0]=1; //前0个花,选择0个花,方案数是1

    int pre=0; //前缀和

    for(int i=1;i<=n;i++)scanf("%d" ,&a[i]); //读入数据,每个花的数量

    for(int i=1;i<=n;i++){//前i个花

        pre+=a[i];  //前缀和 因为我们能够选到的花最多是pre个

        for(int j=min(pre,m);j>=0;j--){ //j表示选择了j盆花只能在0~min(pre,m)里,因为使用了滚动数组,

                                                        所以倒序遍历

            for(int k=1;k<=min(j,a[i]);k++){//第i种花选择k盆,因为k=0就表示f[i-1][j]因为使用了滚动数

                                                            组,所以就可以省略掉,从1开始

                f[j]=(f[j]+f[j-k])%MOD;

            }

        }

    }

    cout<<f[m];

}

[TJOI2007] 线段

题目描述

在一个 n×n 的平面上,在每一行中有一条线段,第 i 行的线段的左端点是(i,Li​),右端点是(i,Ri​)。

你从 (1,1) 点出发,要求沿途走过所有的线段,最终到达 (n,n) 点,且所走的路程长度要尽量短。

更具体一些说,你在任何时候只能选择向下走一步(行数增加 1)、向左走一步(列数减少 1)或是向右走一步(列数增加 1)。当然,由于你不能向上行走,因此在从任何一行向下走到另一行的时候,你必须保证已经走完本行的那条线段。

输入格式

第一行有一个整数 n。

以下 n 行,在第 i 行(总第 (i+1) 行)的两个整数表示 Li​ 和 Ri​。

输出格式

仅包含一个整数,你选择的最短路程的长度。

输入输出样例

输入

6

2 6

3 4

1 3

1 2

3 6

4 5

输出

24

分析:

代码:


#include <bits/stdc++.h>

using namespace std;

const int N=20010;

int n;int a[N][2];

int f[N][2]={0};

int main(){

    cin>>n;

    for(int i=1;i<=n;i++){

        scanf("%d%d",&a[i][0],&a[i][1]);

    }

    a[0][0]=a[0][1]=1;

for(int i=1;i<=n;i++){

        //转移到左边

        f[i][0]=1+a[i][1]-a[i][0]+min(f[i-1][0]+abs(a[i][1]-a[i-1][0]),f[i-1][1]+abs(a[i][1]-a[i-1][1]));

        //转移到右边

        f[i][1]=1+a[i][1]-a[i][0]+min(f[i-1][0]+abs(a[i][0]-a[i-1][0]),f[i-1][1]+abs(a[i][0]-a[i-1][1]));

    }

    int ans=min(f[n][0]+abs(n-a[n][0]),f[n][1]+abs(n-a[n][1]));

    cout<<ans-1; //因为第1层是从1.1转移来的,多加了一个1

    return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/977823.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【算法设计与分析】(一)介绍算法与复杂度分析

【算法设计与分析】&#xff08;一&#xff09;介绍算法与复杂度分析 前言一、什么是算法&#xff1f;二、算法的抽象机制三、描述算法四、复杂度分析4.1 时间复杂度4.2 空间复杂度 前言 从搜索引擎的高效检索&#xff0c;到推荐系统的个性化推荐&#xff0c;再到人工智能领域…

自动驾驶两个传感器之间的坐标系转换

有两种方式可以实现两个坐标系的转换。 车身坐标系下一个点p_car&#xff0c;需要转换到相机坐标系下&#xff0c;旋转矩阵R_car2Cam&#xff0c;平移矩阵T_car2Cam。点p_car在相机坐标系下记p_cam. 方法1&#xff1a;先旋转再平移 p_cam T_car2Cam * p_car T_car2Cam 需要注…

OpenGL ES -> GLSurfaceView绘制点、线、三角形、正方形、圆(顶点法绘制)

XML文件 <?xml version"1.0" encoding"utf-8"?> <com.example.myapplication.MyGLSurfaceViewxmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"…

基于springboot大学生学科竞赛管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 学科竞赛一直是检测学生学习能力好坏的重要手段&#xff0c;随着社会的发展&#xff0c;学科竞赛已经渗透到各个方面。但是传统方式的竞赛方式已经不能更好的胜任越来越多的需求&#xff0c;所以需要设计一个大学生学科竞赛管理系统&#xff0c;来满足日益重要的学科竞赛…

Dify私有化部署自己的AI Agent

1、下载Dify git clone gitgithub.com:langgenius/dify.git 2、创建Dify配置 进入dify目录下的docker目录中,复制.env.example为 .env 3、使用Docker命令进行部署Dify docker compose up -d 4、访问Dify http://localhost/install 5、 设置模型供应商 配置环境变量&#xff1…

【Deepseek+Browser-Use搭建 Web UI自动化】

参考文档&#xff1a;browser-use WebUI DeepSeek V3 把浏览器整成自动化了!_browser use webui 执行run agent chrome没出来-CSDN博客 1、 安装完成&#xff1a; 三、安装步骤&#xff08;适用于macOs、windows、linux&#xff09; 1、拉取WebUI项目 git clone https://gi…

DeepSeek + Mermaid编辑器——常规绘图

下面这张图出自&#xff1a;由清华大学出品的 《DeepSeek&#xff1a;从入门到精通》。 作为纯文本生成模型&#xff0c;DeepSeek虽不具备多媒体内容生成接口&#xff0c;但其开放式架构允许通过API接口与图像合成引擎、数据可视化工具等第三方系统进行协同工作&#xff0c;最终…

解决数据库建表错误:ERROR 1064 (42000) You have an error in your SQL

[TOC](解决数据库建表错误&#xff1a;ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘desk tb_user’ at line 1) 运用MySQL命令运行sql语句进行建表时&am…

compare-form.vue 的 v 来源(来自父组件index.vue中的row行数据)

文章目录 compare-form.vue 的父组件compare-form.vue 的 v 来源相关代码片段1. value 的 Prop 定义2. Watch(value) 及其 watchValue 方法3. 与 value 间接相关的代码&#xff08;影响 v 的初始化或使用&#xff09; 总结 子组件 compare-form.vue父组件 index.vue 以下是关于…

【深度学习神经网络学习笔记(三)】向量化编程

向量化编程 向量化编程前言1、向量化编程2、向量化优势3、正向传播和反向传播 向量化编程 前言 向量化编程是一种利用专门的指令集或并行算法来提高数据处理效率的技术&#xff0c;尤其在科学计算、数据分析和机器学习领域中非常常见。它允许通过一次操作处理整个数组或矩阵的…

基于 SpringBoot Vue 的生鲜商城系统设计和实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

电机控制的空间矢量调制 (SVPWM)

目录 概述 1 电机控制的空间矢量调制 (SVPWM)介绍 2 实现原理 2.1 设计要求 2.2 SVPWM 的实现 3 SVPWM的C语言 3.1 代码文件 3.2 STM32G4平台上验证 4 源代码文件 概述 本文主要介绍电机控制的空间矢量调制 (SVPWM)&#xff0c;空间矢量调制 (SVPWM) 是感应电机和永磁…

服务器离线部署DeepSeek

目标 本次部署的目标是在本地服务器上部署DeepSeek。但是该服务不能连接外网&#xff0c;因此只能使用离线部署的方式。为了一次完成部署。现在云服务器上进行尝试。 云服务器部署尝试 云服务器配置 CentOS72080Ti 11GB 安装准备 1、上传iso并配置为本地yum源 安装前先将…

Unity打包APK报错 using a newer Android Gradle plugin to use compileSdk = 35

Unity打包APK报错 using a newer Android Gradle plugin to use compileSdk 35 三个报错信息如下 第一个 WARNING:We recommend using a newer Android Gradle plugin to use compileSdk 35This Android Gradle plugin (7.1.2) was tested up to compileSdk 32This warning…

Ubuntu 22.04安装K8S集群

以下是Ubuntu 22.04安装Kubernetes集群的步骤概要 一、设置主机名与hosts解析 # Master节点执行 sudo hostnamectl set-hostname "k8smaster" # Worker节点执行 sudo hostnamectl set-hostname "k8sworker1"# 所有节点的/etc/hosts中添加&#xff1a; ca…

《AI 大模型 ChatGPT 的传奇》

《AI 大模型 ChatGPT 的传奇》 ——段方 某世界 100 强企业大数据/AI 总设计师 教授 北京大学博士后 助理 &#xff1a;1三6三二四61四五4 1 AI 大模型的概念和特点 1.1 什么是”大模型、多模态“&#xff1f; 1.2 大模型带来了什么&#xff1f; 1.3 大模型为什么能产生质变&am…

期权帮|股指期货多单和空单有什么区别?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 股指期货多单和空单有什么区别&#xff1f; 一、股指期货多单和空单定义与操作方向&#xff1a; &#xff08;1&#xff09;股指期货多单定义&#xff1a;投资者买入股指期货合…

从【人工智能】到【计算机视觉】,【深度学习】引领的未来科技创新与变革

前几天偶然发现了一个超棒的人工智能学习网站&#xff0c;内容通俗易懂&#xff0c;讲解风趣幽默&#xff0c;简直让人欲罢不能。忍不住分享给大家&#xff0c;点击这里立刻跳转&#xff0c;开启你的AI学习之旅吧&#xff01; 前言 – 人工智能教程https://www.captainbed.cn/l…

如何在VMware虚拟机的window10系统中安装网易mumu模拟器

安卓模拟器是可以在电脑的windows环境中运行手机软件的工具,喜欢网游或者是要逆向安卓应用应该都要安装这个模拟器,如果要模拟器正常工作,主机的虚拟化应该开启,也就是要开启vt。在有些情况下,需要把模拟器安装到电脑的虚拟机里,隔离模拟器与主机,这时vt的开启就稍麻烦些…

【Rust中级教程】2.10. API设计原则之受约束性(constrained) Pt.1:对类型进行修改、`#[non_exhaustive]`注解

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 2.10.1. 接口的更改要三思 如果你的接口要做出对用户可见的更改&#xff0c;那么一定要三思…