POJ 1836 Alignment

有一排人,身高可能不同,现在有一个理想状态是这排的每个人向左或向右看没有被挡住视野(当遇到等高或更高的人时会被挡住),现在问最少让几人出列可以达到这个理想状态。

最少人出列,其实就是一个人数最多的理想状态。求一个人数最多的类似"山峰"的高度排列。那就可以从左到右、从右到左各求一遍LIS

 

开始用 O(n2)的写法WA了,错在搞错dp[i] 的含义,dp[i]代表以i为尾的LIS,最后输出答案时应该枚举 dp[i]+dp[j]

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 int height[1024];
 6 int dp1[1024];//up
 7 int dp2[1024];//down
 8 
 9 int main(){
10     int N;
11     scanf("%d",&N);
12     for(int i=0;i<N;++i){
13         double tmp;
14         scanf("%lf",&tmp);
15         height[i]=tmp*100000+0.1;
16     }
17     for(int i=0;i<N;++i){
18         dp1[i]=1;
19         for(int j=0;j<i;++j){
20             if(height[j]<height[i]) dp1[i]=max(dp1[i],dp1[j]+1);
21         }
22     }
23     for(int i=N-1;i>=0;i--){
24         dp2[i]=1;
25         for(int j=N-1;j>i;--j){
26             if(height[j]<height[i]) dp2[i]=max(dp2[i],dp2[j]+1);
27         }
28     }
29     //for(int i=0;i<N;++i) printf("i : %d\tup: %d , down: %d\n",i,dp1[i],dp2[i]);
30     int ans=-1;
31     //ans=max(ans,dp2[0]);
32     //for(int i=0;i<N-1;++i)ans=max(ans,dp1[i]+dp2[i+1]);
33     //ans=max(ans,dp1[N-1]);
34     for(int i=0;i<N;++i)
35         for(int j=i+1;j<N;++j)
36             ans=max(ans,dp1[i]+dp2[j]);
37     printf("%d\n",N-ans);
38 }
View Code

 

用O(nlogn)的写法

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 const int INF=0x3f3f3f3f;
 6 int height[1024];
 7 int dp1[1024];//up
 8 int dp2[1024];//down
 9 int S[1024];
10 int tot;
11 
12 int B_S(int l,int r,int ob){
13     int mid;
14     r--;
15     while(l<=r){
16         mid=(l+r)>>1;
17         if(S[mid]>ob) r=mid-1;
18         else l=mid+1;
19     }
20     return l;
21 }
22 
23 int main(){
24     int N;
25     scanf("%d",&N);
26     for(int i=0;i<N;++i){
27         double tmp;
28         scanf("%lf",&tmp);
29         height[i]=tmp*100000+0.1;
30     }
31     
32     fill(S,S+N,INF);
33     for(int i=0;i<N;++i){
34         int pos=lower_bound(S,S+N,height[i])-S;
35         dp1[i]=pos+1;
36         S[pos]=height[i];
37     }
38     fill(S,S+N,INF);
39     for(int i=N-1;i>=0;i--){
40         int pos=lower_bound(S,S+N,height[i])-S;
41         dp2[i]=pos+1;
42         S[pos]=height[i];
43     }
44     //for(int i=0;i<N;++i) printf("i : %d\tup: %d , down: %d\n",i,dp1[i],dp2[i]);
45     int ans=-1;
46     //ans=max(ans,dp2[0]);
47     //for(int i=0;i<N-1;++i)ans=max(ans,dp1[i]+dp2[i+1]);
48     //ans=max(ans,dp1[N-1]);
49     for(int i=0;i<N;++i)
50         for(int j=i+1;j<N;++j)
51             ans=max(ans,dp1[i]+dp2[j]);
52     printf("%d\n",N-ans);
53 }
View Code
 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 int height[1024];
 6 int dp1[1024];//up
 7 int dp2[1024];//down
 8 int S[1024];
 9 int tot;
10 
11 int B_S(int l,int r,int ob){
12     int mid;
13     r--;
14     while(l<=r){
15         mid=(l+r)>>1;
16         if(S[mid]>ob) r=mid-1;
17         else l=mid+1;
18     }
19     return l;
20 }
21 
22 int main(){
23     int N;
24     scanf("%d",&N);
25     for(int i=0;i<N;++i){
26         double tmp;
27         scanf("%lf",&tmp);
28         height[i]=tmp*100000+0.1;
29     }
30     tot=0;
31     for(int i=0;i<N;++i){
32         if(tot==0||S[tot-1]<height[i]) S[tot++]=height[i];
33         else{
34             //int pos=B_S(0,tot,height[i]);
35             int pos=lower_bound(S,S+tot,height[i])-S;
36             S[pos]=height[i];
37         }
38         dp1[i]=tot;
39     }
40     tot=0;
41     for(int i=N-1;i>=0;i--){
42         if(tot==0||S[tot-1]<height[i]) S[tot++]=height[i];
43         else{
44             //int pos=B_S(0,tot,height[i]);
45             int pos=lower_bound(S,S+tot,height[i])-S;
46             S[pos]=height[i];
47         }
48         dp2[i]=tot;
49     }
50     //for(int i=0;i<N;++i) printf("i : %d\tup: %d , down: %d\n",i,dp1[i],dp2[i]);
51     int ans=-1;
52     //ans=max(ans,dp2[0]);
53     //for(int i=0;i<N-1;++i)ans=max(ans,dp1[i]+dp2[i+1]);
54     //ans=max(ans,dp1[N-1]);
55     for(int i=0;i<N;++i)
56         for(int j=i+1;j<N;++j)
57             ans=max(ans,dp1[i]+dp2[j]);
58     printf("%d\n",N-ans);
59 }
View Code

一种单调栈,一种从修改预设数组,都是二分

开始一直在用upper_bound,后来脑补跑数据才发现,upper_bound只能用来找不下降子序列,lower_bound是用来找严格上升子序列。

转载于:https://www.cnblogs.com/Kiritsugu/p/9581702.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021年广西高考成绩查询方法,2021年广西高考成绩查询网站查分网址:https://www.gxeea.cn/...

【摘要】高考结束后大家最为关心的问题就是在哪里查分&#xff0c;如何查分&#xff0c;高考频道特别整理2021年广西高考成绩查询查分网址&#xff0c;成绩公布时考生可直接点击网址进行查分&#xff0c;预祝大家都能顺利的考上理想的大学&#xff01;由于&#xff0c;各省级招…

ppt倒计时_年终会议做一个这样的倒计时PPT,保证惊艳全场!1分钟就能学会

倒计时动画很经常被用在一些产品的发布会或是新年晚会的现场&#xff0c;因为倒计时可以营造除以中紧张的氛围~那么我们常见的倒计时动画都是怎么做出来的呢&#xff1f;其实一点也不难&#xff0c;不需要任何专业的视频软件&#xff0c;只要用我们日常工作中最常用的PPT就能做…

全国计算机等级考试题库二级C操作题100套(第93套)

第93套&#xff1a; 给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun 函数,每调用一次fun函数&#xff0c;输出链表尾部结点中的数据&#xff0c;并释放该结点&#xff0c;使链表 缩短。 请在程序的下划线处填入正确的内容并把下划线删除&#xff0c;使程…

修改Advance Template Jsp模板的编码格式

2019独角兽企业重金招聘Python工程师标准>>> windows ——》 preferences ——》MyEclipse——》Files and Editers——》JSP 在此widzard中修改相应的编码。 转载于:https://my.oschina.net/wangfree/blog/127313

ASP.NET Core ---日志

一、日志记录&#xff1a; 1、日志的作用&#xff1a; 程序中记录日志一般有两个目的&#xff0c;故障定位和显示程序运行状态。好的日志记录方式可以提供足够多定位问题的依据。 2、日志的等级&#xff1a; 有良好工作习惯的人&#xff0c;工作的时候会将领导交待下来的工作分…

2021年慈溪横河中学高考成绩查询,慈溪中学

2013浙江慈溪中考分数线公布2013年慈溪市中考成绩揭晓&#xff0c;从慈溪市教育局获悉&#xff0c;今年慈溪市普高投档控制线为485.5;慈溪中学统招线为565。昨天&#xff0c;公办普高第一批次录取分数线同时划定&#xff1a;浒山中学541.5&#xff0c;龙山中学485.5&#xff0c…

circle函数用法 turtle_Python绘图库Turtle详细分析

关注Python学习交流学习更多Python知识Turtle库是Python语言中一个很流行的绘制图像的函数库&#xff0c;想象一个小乌龟&#xff0c;在一个横轴为x、纵轴为y的坐标系原点&#xff0c;(0,0)位置开始&#xff0c;它根据一组函数指令的控制&#xff0c;在这个平面坐标系中移动&am…

全国计算机等级考试题库二级C操作题100套(第95套)

第95套&#xff1a; 给定程序中&#xff0c;函数fun的功能是:计算NN矩阵的主对角线元素和反向对角线元素之和&#xff0c;并作为函数值返回。注意&#xff1a;要求先累加主对角线元素中的值&#xff0c;然后累加反向对角线元素中的值。例如&#xff0c;若N3&#xff0c;有下列…

性能测试基本流程介绍(《软件性能测试过程详解与安全剖析》)

1、性能测试团队的人员构成 性能测试团队中应包括以下角色&#xff1a;项目测试经理、测试设计角色、测试开发角色、测试执行角色、测试分析角色和支持角色&#xff08;如系统、网络和数据库支持等&#xff09;。 2、性能测试过程模型(PTGM) PTGM模型包括以下几个步骤&#xff…

苹果6s html5分数,iPhone 6s Plus的屏幕尺寸是多少?分辨率是多少?

iPhone 6s Plus的屏幕尺寸是多少iPhone 6s Plus的屏幕尺寸是5.5英寸。针对iPhone 6s Plus的屏幕尺寸是多少的问题&#xff0c;摄像头方面&#xff0c;苹果iPhone6s Plus采用了一枚1200万像素的iSight摄像头&#xff0c;其传感器单个像素尺寸的感光面积为1.22微米&#xff0c;这…

全国计算机等级考试题库二级C操作题100套(第96套)

第96套&#xff1a; 给定程序中,函数fun的功能是:有NN矩阵,将矩阵的外围元素顺时针旋转。 操作顺序是&#xff1a;首先将第一行元素的值存入临时数组r&#xff0c;然后使第一列成为第一行&#xff0c; 最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列。…

USB主机是如何检测到设备的插入的呢?

USB设备的插入检测机制 首先&#xff0c;在USB集线器的每个下游端口的D和D-上&#xff0c;分别接了一个15K欧姆的下拉电阻到地。这样&#xff0c;在集线器的端口悬空时&#xff0c;就被这两个下拉电阻拉到了低电平。而在USB设备端&#xff0c;在D或者D-上接了1.5K欧姆上拉电阻.…

python堆排序算法_python 排序 堆排序

算法思想 &#xff1a;堆排序利用堆数据结构设计的一种排序算法&#xff0c;堆是一种近似完全二叉树的结构&#xff0c;同时满足堆积的性质&#xff0c;即对于任意的i均有ki>k(2i1),ki>k(2i2)步骤&#xff1a;将数组转化为最大堆将当前堆的根结点和最后一个结点交换&…

final在类和方法中的使用

package final0; //final修饰的类不能继承//final修饰的方法不能继承public class TestFinal3 { public static void main(String[] args) { }} // 修饰的类不能继承final class Dad {}class Dad { // final修饰的方法不能继承:public final void method(){} public final void…

单招计算机专业考多少分可以录取,单招考多少分能过?单招分数线

单独招生是高等职业院校的一种招生形式&#xff0c;和普通高考相比&#xff0c;虽然单招人数连年增加&#xff0c;但报考人数相比高考总人数还是略少的&#xff0c;竞争压力没有那么大&#xff0c;录取率相对高很多&#xff0c;基本不存在落榜&#xff0c;上大学更安全&#xf…

全国计算机等级考试题库二级C操作题100套(第97套)

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

【job】2013年5-5阿里巴巴暑期实习招聘笔试题目及部分答案

网上各种标为2013年&#xff0c;实际上都是2012年或者更早的&#xff0c;下面的才是真正的2013年5月5日考试的卷子。 答题说明&#xff1a; 1.答题时间90分钟&#xff0c;请注意把握时间&#xff1b; 2.试题分为四个部分&#xff1a;单项选择题&#xff08;10题&#xff0c;20分…

powershell新建python文件_powershell如何打开Python

展开全部(1)打开powershell。在开始菜单的搜索框输入powershell&#xff0c;回车即可打开。(2)运行62616964757a686964616fe59b9ee7ad9431333337616631python。在打开的powershell里直接输入python&#xff0c;回车即可打开。如果python不能被识别&#xff0c;需要先在powershe…

操作系统以什么方式组织用户使用计算机,操作系统习题

1.1 什么是计算机的操作系统?操作系统是有效地控制和管理计算机系统资源&#xff0c;合理地组织计算机的工作流程&#xff0c; 以及方便用户的程序的集合1.2 操作系统管理计算机系统的哪些资源?操作系统管理和控制计算机系统中的所有软、硬件资源1.3 为什么要引进分时系统?分…

微信小程序的页面渲染(if/for)

下面&#xff0c;粗略的介绍一下微信小程序的条件渲染、列表渲染、数据绑定等&#xff0c;详细的内容大家可以去看微信小程序的API,在此只做简单描述&#xff0c;希望能帮助到大家 条件渲染 <!--wxml--> <view wx:if"{{view WEBVIEW}}"> WEBVIEW </v…