BZOJ 1609 [Usaco2008 Feb]Eating Together麻烦的聚餐:LIS LDS (nlogn)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1609
题意:
给你一个只由数字"1,2,3"组成的序列a[i],共n个数。
你可以任意更改这些数字,使得序列中每一种数字都“站在一起”,并且单调不减或不增。
例如:"1111222", "332211"...
问你至少更改多少个数字。
题解:
单调不减:求原序列LIS(最长非降子序列),当前答案t1 = n - LIS.
单调不增:求原序列LDS(最长非升子序列),当前答案t2 = n - LDS.
最终答案ans = min(t1,t2).
注:n为30000,求LIS & LDS用nlogn方法。
AC Code:
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #define MAX_N 30005 5 6 using namespace std; 7 8 int n; 9 int a[MAX_N]; 10 int d[MAX_N]; 11 12 int cal_lis() 13 { 14 int len=1; 15 d[1]=a[0]; 16 for(int i=1;i<n;i++) 17 { 18 if(a[i]>=d[len]) 19 { 20 d[++len]=a[i]; 21 continue; 22 } 23 int lef=1; 24 int rig=len; 25 while(rig-lef>1) 26 { 27 int mid=(lef+rig)/2; 28 if(a[i]>=d[mid]) lef=mid; 29 else rig=mid; 30 } 31 int ans; 32 if(a[i]<d[lef]) ans=0; 33 else ans=lef; 34 d[ans+1]=min(d[ans+1],a[i]); 35 } 36 return len; 37 } 38 39 int cal_lds() 40 { 41 int len=1; 42 d[1]=a[0]; 43 for(int i=1;i<n;i++) 44 { 45 if(a[i]<=d[len]) 46 { 47 d[++len]=a[i]; 48 continue; 49 } 50 int lef=1; 51 int rig=len; 52 while(rig-lef>1) 53 { 54 int mid=(lef+rig)/2; 55 if(a[i]<=d[mid]) lef=mid; 56 else rig=mid; 57 } 58 int ans; 59 if(a[i]>d[lef]) ans=0; 60 else ans=lef; 61 d[ans+1]=max(d[ans+1],a[i]); 62 } 63 return len; 64 } 65 66 int main() 67 { 68 cin>>n; 69 for(int i=0;i<n;i++) 70 { 71 cin>>a[i]; 72 } 73 int v1=cal_lis(); 74 int v2=cal_lds(); 75 cout<<n-max(v1,v2)<<endl; 76 }
转载于:https://www.cnblogs.com/Leohh/p/7604687.html
BZOJ 1609 [Usaco2008 Feb]Eating Together麻烦的聚餐:LIS LDS (nlogn)相关推荐
- [BZOJ] 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1646 Solv ...
- bzoj 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐(DP)
1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1616 Solv ...
- 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1010 Solv ...
- [Usaco2008 Feb]Eating Together麻烦的聚餐
题目描述 为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想所有第3批就餐的奶牛排在队尾,队伍的前端由设定为第1批就餐的奶牛占据,中间的位置就归第2批 ...
- [Usaco2008 Feb]Eating Together麻烦的聚餐[最长不下降子序列]
Description 为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想所有第3批就餐的奶牛排在队尾,队伍的前端由设定为第1批就餐的奶牛占据,中间的 ...
- [BZOJ] 1610: [Usaco2008 Feb]Line连线游戏
1610: [Usaco2008 Feb]Line连线游戏 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 2264 Solved: 1017 [Sub ...
- bzoj 1611: [Usaco2008 Feb]Meteor Shower流星雨(DP)
1611: [Usaco2008 Feb]Meteor Shower流星雨 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1631 Solved: 6 ...
- bzoj 1610: [Usaco2008 Feb]Line连线游戏
1610: [Usaco2008 Feb]Line连线游戏 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 2235 Solved: 997 [Subm ...
- 1593: [Usaco2008 Feb]Hotel 旅馆
1593: [Usaco2008 Feb]Hotel 旅馆 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 489 Solved: 272 [Subm ...
最新文章
- 标准差、协方差、相关性分别是什么?
- HyperLink 鼠标经过时候显示全部文字
- html radio 默认图片替换_html,css_如何更改radio、checkbox选项框背景图?,html,css - phpStudy...
- 【深度学习】PyTorch 中的线性回归和梯度下降
- 分布式系统的工程化开发方法
- 国内首位!Node.js社区将阿里云工程师张秋怡吸纳为CTC成员
- Arrays工具、二维数组以及LeetCode练习题
- 计算机键盘各个键的用途,给大家介绍键盘各个键的功能图解
- 【产品经理学习笔记】Part 7 收益预估
- 关于解决Visual Studio 实时调试器弹出的对话框问题 三种解决办法
- 大神TP_萌新到大神的必修课---分路篇v
- 【最后一天报名】数据科学峰会分论坛:供应链、用户增长、电商零售
- Android中m、mm、mmm、mma、mmma的区别
- 苹果商店App Store审核指南中文版(14-15-2016最新)-附:2015年App Store审核被拒Top10(官网)+被拒的23个理由(中英)
- 《寒江独钓 Windows内核安全》——串口的过滤
- 需要小程序源码/模板的进
- C语言 | 【耗费一夜总结三本C语言系列】之 结构体、联合、枚举
- Flutter 多渠道打包详解(埋点统计系列文章)
- 国家标准《道路交通标志和标线》
- struct in_addr 结构体
热门文章
- 投影仪投影粉色_DecisionTreeRegressor —停止用于将来的投影!
- android 揭示动画_遗传编程揭示具有相互作用的多元线性回归
- 收入和贷款有什么关系?
- pcb中layer stack manager 中,右上角的layer pairs 、internal layer pairs和build-up,三者的区别?
- 在C/C++代码中使用SSE等指令集的指令(1)介绍
- 压力测试过负载均衡_性能测试的方法有哪些?
- dba的前景_运维、测试、程序员,这些技术岗位哪个更有前景?
- mysql 层_mysql三层体系
- java wordcount程序_[java]wordcount程序
- opencv利用矩形框选中某一区域_【从零学习OpenCV】4Ubuntu系统中安装OpenCV 4