守卫

2024-03-16 23:48
文章标签 守卫

本文主要是介绍守卫,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

守卫

题解

这道题是一个区间dp。若[l,r]中必须放一个点才能看完这个区间。

我们先确定右端点,  然后从左往右扫,记p为r能看到的最左端的点。在扫的过程中,用sum记录p及其右的答案。r最左边只能看到p,所以p-1 的纵坐标必定小于p即[l,p-1]中,p与p-1中必定有一个点被选。

因此dp式为

dp_{i,j}= sum+min\left ( dp_{l,p-1},dp_{l,p} \right )

扫的过程中,需要更新sum与p。sum更新后,把p更为l。

只要slope(l,r)> slope(p,r),l就可见

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream> 
#include<algorithm>
#include<stack>
#include<vector>
#include<queue>
using namespace std;
typedef long long LL;
#define gc() getchar()
LL n,h[5005],dp[5005][5005],ans;
template<typename _T>
inline void read(_T &x)
{_T f=1;x=0;char s=gc();while(s>'9'||s<'0'){if(s=='-')f=-1;s=gc();}while(s>='0'&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=gc();}x*=f;
}
double slope(LL l,LL r)
{return (1.0*(h[r]-h[l]))/(1.0*(r-l)); 
}
bool query(LL a,LL b,LL c)
{return slope(c,a)<slope(b,c);
}
int main()
{read(n);for(int i=1;i<=n;i++) read(h[i]);for(int i=1;i<=n;i++) dp[i][i]=1,ans^=1;//初始化for(int i=1;i<=n;i++){LL sum=1,p=0;for(int j=i-1;j>0;j--){if(query(j,p,i)||p==0) sum+=min(dp[j+1][p-1],dp[j+1][p]),p=j;//更新sum与pdp[j][i]=sum+min(dp[j][p-1],dp[j][p]);//dp从i到j的区间ans^=dp[j][i];//ans异或dp值//printf("%d %d:%d\n",j,i,dp[j][i]);}}printf("%lld",ans);return 0;
}

谢谢!!!

这篇关于守卫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/817133

相关文章

动态路由和路由导航守卫及其案例分析

为什么需要动态路由? 动态路由其实用的不多,在实际开发中,如果遇到权限分配问题,比如对于一个公司人员的后台管理系统,那对不同成员的权限肯定不同,对于人事部,他们有权限进入成员表对人员的流动进行管理,对于技术部,他们有权上传任务进度来进行团队协作等等。对于不同人员,界面的渲染也不能相同。在有一些公司中可能会采用隐藏组件来实现权限的分配,但这样治标不治本:路由还是注册了,理论上只要知道路径,即使没有

Vue(十三) 路由、路由嵌套、query、param传参、propos、replace属性。编程式路由导航,特有的生命周期函数,路由守卫

文章目录 路由1. 基本使用2. 多级(嵌套)路由3. 路由query传参4. 命名路由5. 路由param传参6. propos属性7. replace属性8. 编程式路由导航9. 缓存路由组件10. actived,deactived生命周期函数11. 路由守卫1、全局路由2、独享路由3、组件内路由守卫 12. 路由器工作的两种模式 路由 路由就是一组key-value的

web会话跟踪-token令牌与路由守卫

为什么添加路由守卫守卫? 为了防止用户知道主页面地址从而未登录在地址框输入地址而进行地址跳转,所以我们需要采取一些措施防止这种情况 //配置路由导航守卫, 每当进行一次组件路由时,自动执行此段代码rout.beforeEach((to,from,next)=>{if(to.path=='/login'){ //to.path 访问的路由地址return next();//继续正常访问目标地址

React实现路由,路由守卫

1. 下载install react-router-dom react中实现路由需要依赖react-router-dom实现,通过如下命令下载 npm install react-router-dom 2. 引入组件,实现路由逻辑 我们要引入react-router-dom包中的BrowserRouter,Route,Routes,Navigate,并在app.jsx文件中书如下代码实现路

react实现导航守卫

React本身并没有像Vue那样的直接名为“导航守卫”的概念,但在React Router中,我们可以通过特定的方法和技术来模拟和实现类似的功能。以下是对React Router中模拟导航守卫的详解: 1. 导航守卫的概念 导航守卫:在路由切换之前执行的钩子函数,用于控制路由的跳转。在Vue Router中,这通常用于路由鉴权,即在路由跳转之前判断用户是否有权访问目标页面。React中的模拟:

如何解决vue中的路由守卫失效问题

引言 1. 路由守卫简介 路由守卫是前端开发中一个至关重要的概念,特别是在使用单页应用(SPA)框架如React、Vue或Angular时。它们充当了SPA中的“门卫”,控制着用户对不同页面的访问权限。路由守卫的核心功能是确保用户在访问特定页面之前满足一定的条件,比如登录状态、权限验证等。 2. 路由守卫的重要性 安全性:防止未授权访问敏感页面。用户体验:根据用户状态引导至合适的页面,比如

Vue80-全局路由守卫:前置、后置

一、路由守卫的定义  二、需求  在第三步,做校验! 三、代码实现 3-1、前置路由守卫  注意,此时就不能将router一开始就暴露出去了! to和from是路由组件的信息。 写法一:  写法二: 缺点:若是路由判断很多,此写法会很繁琐。 写法三:路由元信息:程序员自定义的信息   放在需要校验的路由规则

Vue82-组件内路由守卫

一、组件内路由守卫的定义  在一个组件里面去写路由守卫,而不是在路由配置文件index.js中去写。 此时,该路由守卫是改组件所独有的! 只有通过路由规则进入的方式,才会调这两个函数,否则,若是只是用<About/>标签进入的方式,是不会调用这两个函数的。 二、组件内路由守卫的代码实现  三、小结

Vue路由守卫的使用

示例如下:(第一张图)当你点击车1的时候你写了路由守卫就点不开出现无权访问 (第二张图,就是可以访问后的图)有路由守卫点不开的情况下当你在本地存储中写了你在路由守卫中写的东西就可以进入了 你需要在router下的index.js中(以下代码有我写的路由页面不用管,看有注释的代码是路由守卫,通过你定义的“user=张三“的时候访问就会显示出来第二张图) import Vue from 'vue

vue2前置路由守卫中使用this.$store.state报错解决

1、问题描述:在前置路由守卫逻辑中,要更改vuex中的store的state状态,使用常规的this.$store.state报错   2、问题原因: 在vue2是vueRouter前置路由守卫中,this关键字并不会指向vue实例,因此不能使用this.$store来访问vuex,此时会提示this.$store 是未定义的。 3、问题解决 如果在路由守卫中需要访问stor