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:
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 30005 using namespace std; int n;
int a[MAX_N];
int d[MAX_N]; int cal_lis()
{
int len=;
d[]=a[];
for(int i=;i<n;i++)
{
if(a[i]>=d[len])
{
d[++len]=a[i];
continue;
}
int lef=;
int rig=len;
while(rig-lef>)
{
int mid=(lef+rig)/;
if(a[i]>=d[mid]) lef=mid;
else rig=mid;
}
int ans;
if(a[i]<d[lef]) ans=;
else ans=lef;
d[ans+]=min(d[ans+],a[i]);
}
return len;
} int cal_lds()
{
int len=;
d[]=a[];
for(int i=;i<n;i++)
{
if(a[i]<=d[len])
{
d[++len]=a[i];
continue;
}
int lef=;
int rig=len;
while(rig-lef>)
{
int mid=(lef+rig)/;
if(a[i]<=d[mid]) lef=mid;
else rig=mid;
}
int ans;
if(a[i]>d[lef]) ans=;
else ans=lef;
d[ans+]=max(d[ans+],a[i]);
}
return len;
} int main()
{
cin>>n;
for(int i=;i<n;i++)
{
cin>>a[i];
}
int v1=cal_lis();
int v2=cal_lds();
cout<<n-max(v1,v2)<<endl;
}
BZOJ 1609 [Usaco2008 Feb]Eating Together麻烦的聚餐:LIS & LDS (nlogn)的更多相关文章
- BZOJ 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐( LIS )
求LIS , 然后用 n 减去即为answer ---------------------------------------------------------------------------- ...
- Bzoj 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 二分
1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1272 Solve ...
- BZOJ 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Description 为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按F ...
- bzoj 1609[Usaco2008 Feb]Eating Together麻烦的聚餐【dp】
设up[i][j]为第i位升序为j的最小修改数,down为降序 #include<iostream> #include<stdio.h> using namespace std ...
- 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1010 Solv ...
- 【BZOJ】1609: [Usaco2008 Feb]Eating Together麻烦的聚餐(dp+被坑)
http://www.lydsy.com/JudgeOnline/problem.php?id=1609 首先我不得不说,我被这题坑了.题目前边没有说可以不需要3种牛都有啊!!!!!!!!然后我一直在 ...
- 【BZOJ】1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
[算法]动态规划 [题解]DP有个特点(递推的特点),就是记录所有可能状态然后按顺序转移. 最优化问题中DP往往占据重要地位. f[i][j]表示前i头奶牛,第i头改为号码j的最小改动数字,这样每头奶 ...
- BZOJ1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 938 Solved ...
- [BZOJ1609] [Usaco2008 Feb] Eating Together麻烦的聚餐 (dp)
Description 为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想所有第3批就餐的奶牛排在队尾,队伍的前端由设定为第1批就餐的奶牛占据,中间的 ...
随机推荐
- JAVA_Could not find property [struts.actionMapping]怎么办
你的项目中不包含log4j.jar这个文件,包含进去即可
- Solidworks如何绘制螺纹
1 随便画一个圆柱 2 在原来的地方画一个一摸一样的圆(草图2) 3 在特征选项卡中点击曲线-螺旋线/涡状线 4 设置螺距和圈数,画螺旋线 5 建立一个基准面,第一参考是点,第二参考是 ...
- json和jsonp以及ajax
简单的说: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. JSON的优点: 1.基于纯文本,跨平台传递极其简单: 2.Javascript原生支持,后 ...
- centos6.6安装mysql5.5
在mysql官网下载mysql-5.5.54-linux2.6-x86_64.tar.gz解压:tar -zxvf mysql-5.5.54-linux2.6-x86_64.tar.gz修改名字mv ...
- dede二级导航与二级栏目 ----内容介绍二级导航
{dede:channelartlist typeid='top'}//如果只需要拿一列,则需要使用row='1'这个属性否则会根据子频道的数目循环输出 <a href="{dede: ...
- Java系统中如何拆分同步和异步
很多开发人员说,将应用程序切换到异步处理很复杂.因为他们有一个天然需要同步通信的Web应用程序.在这篇文章中,我想介绍一种方法来达到异步通信的目的:使用一些众所周知的库和工具来设计他们的系统. 下面的 ...
- com.opensymphony.xwork2.ognl.OgnlValueStack - Error setting expression 'customer.applyRate' with value '[Ljava.lang.String;@7d3fae2c'
出错的3个最可能的原因:我是第二种错误 1.action配置错误 <action name="doCreateMeetingInfo" class="meeting ...
- TP 自动验证规则
#自动验证 protected $_validate=array( #参数最后代表1 表示必须验证,0表示当这个字段存在的时候验证 array('username','require','账号不能为空 ...
- PowerBuilder -- 未公开函数
原文:http://blog.csdn.net/happymagic/article/details/51077322 @.已知一个DW中的某列的列名(在字符串变量中),以获得这个列对象的DWO 方法 ...
- 输出 pdf
jar 包 :core-renderer.jar iText-2.0.8.jar iTextAsian.jar 方式1: import java.io.FileNotFoundException ...