POJ 1836 Alignment --LIS&LDS
题意:n个士兵站成一排,求去掉最少的人数,使剩下的这排士兵的身高形成“峰形”分布,即求前面部分的LIS加上后面部分的LDS的最大值。
做法:分别求出LIS和LDS,枚举中点,求LIS+LDS的最大值。。
注意一点,有可能最中间的值重复,也有可能不重复,所以要考虑这两种情况:(假设中点为K)
1)不重复的情况,求LIS(K) + LDS(K+1)的最大值
2)重复的情况,这时K既包含在LIS当中,也包含在LDS中,计算了两次,最终结果要减掉1
复杂度:O(n^2)
代码:
#include <iostream>
#include <cstdio>
using namespace std;
#define N 1007 int dpi[N],dpd[N]; //LIS和LDS
double a[N]; int main()
{
int n,i,j,k,maxi,mm;
while(scanf("%d",&n)!=EOF)
{
for(i=;i<n;i++)
scanf("%lf",&a[i]);
for(i=;i<n;i++)
dpi[i] = ,dpd[i] = ;
for(i=;i<n;i++)
{
maxi = -;
for(j=;j<i;j++)
{
if(a[j] < a[i])
{
if(dpi[j] > maxi)
maxi = dpi[j];
}
}
dpi[i] = max(dpi[i],maxi+);
}
for(i=n-;i>=;i--)
{
maxi = -;
for(j=n-;j>i;j--)
{
if(a[j] < a[i])
{
if(dpd[j] > maxi)
maxi = dpd[j];
}
}
dpd[i] = max(dpd[i],maxi+);
}
int k1,k2;
int res = -;
for(k=;k<=n-;k++) //中点重复的情况
{
mm = -;
for(i=;i<=k;i++)
{
if(dpi[i] > mm)
mm = dpi[i];
}
k1 = mm;
mm = -;
for(i=n-;i>=k;i--)
{
if(dpd[i] > mm)
mm = dpd[i];
}
k2 = mm;
res = max(res,k1+k2-);
}
for(i=;i<n;i++) //中点不重复的情况
{
for(j=i+;j<n;j++)
{
if(dpi[i]+dpd[j] > res)
res = dpi[i]+dpd[j];
}
}
printf("%d\n",n-res);
}
return ;
}
POJ 1836 Alignment --LIS&LDS的更多相关文章
- POJ 1836 Alignment 最长递增子序列(LIS)的变形
大致题意:给出一队士兵的身高,一开始不是按身高排序的.要求最少的人出列,使原序列的士兵的身高先递增后递减. 求递增和递减不难想到递增子序列,要求最少的人出列,也就是原队列的人要最多. 1 2 3 4 ...
- POJ 1836 Alignment
Alignment Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 11450 Accepted: 3647 Descriptio ...
- poj 1836 Alignment(dp)
题目:http://poj.org/problem?id=1836 题意:最长上升子序列问题, 站队,求踢出最少的人数后,使得队列里的人都能看到 左边的无穷远处 或者 右边的无穷远处. 代码O(n^2 ...
- POJ 1836 Alignment 水DP
题目: http://poj.org/problem?id=1836 没读懂题,以为身高不能有相同的,没想到排中间的两个身高是可以相同的.. #include <stdio.h> #inc ...
- poj 1836 Alignment(线性dp)
题目链接:http://poj.org/problem?id=1836 思路分析:假设数组为A[0, 1, …, n],求在数组中最少去掉几个数字,构成的新数组B[0, 1, …, m]满足条件B[0 ...
- POJ - 1836 Alignment (动态规划)
https://vjudge.net/problem/POJ-1836 题意 求最少删除的数,使序列中任意一个位置的数的某一边都是递减的. 分析 任意一个位置的数的某一边都是递减的,就是说对于数h[i ...
- POJ 1836 Alignment (双向DP)
Alignment Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10804 Accepted: 3464 Descri ...
- POJ 1836 Alignment(DP max(最长上升子序列 + 最长下降子序列))
Alignment Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14486 Accepted: 4695 Descri ...
- poj 1836 LIS变形
题目链接http://poj.org/problem?id=1836 Alignment Time Limit: 1000MS Memory Limit: 30000K Total Submiss ...
随机推荐
- spring boot学习笔记
spring boot 是什么 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程. spring boot采用了“约定优于配置” ...
- styleCop
1styleCop安装 安装参考 2和VS集成 要和vs集成一定要在安装时把MSBuild files那个选项选中的,否则安装后是不会和VS集成集成的. 3styleCop使用 User Guide ...
- apple store链接格式文档
备份一下: The app on Appstore has specific URL format http://itunes.apple.com/[country-code]/app/[app-na ...
- Jquery学习—jquery的事件
1.Jquery事件1:one 1)one() 方法是为所选的元素绑定一个仅出发一次的处理函数,调用格式 one(type,[data],fn) 2)其中参数type是事件类型,即需要触发什么类型的事 ...
- JS数组的forEach方法(兼容所有浏览器)
//->自己在内置类的原型上扩展一个myForEach来处理forEach不兼容的问题//callBack:回调函数,遍历数组中的一项,就要执行一次callBack//context:改变cal ...
- Windows 2012 R2中安装SharePoint 2013 sp1参考
之前介绍过在window 2012中安装SharePoint 2013,这次,借着SharePoint 2013 sp1补丁发布之际,介绍下在window 2012 r2中安装SharePoint 2 ...
- sharepoint 2013 文件“/_controltemplates/SPMRB/AllStatBookingsForm.ascx”不存在
现象: 文件“/_controltemplates/SPMRB/AllStatBookingsForm.ascx”不存在. 分析: 此代码在sp2010好用,但是在sp2013则报以上错误. 解决办法 ...
- Android Sqlite 实例入门
通过一个简单的例子来学习Sqlite,学生选课系统,一开始的需求是学生可以选课,选课完成后可以查询到已经选择的课. 首先设计三个表,学生,课程,选课.学生表存储学生的信息,课程表存储课程的信息,选课表 ...
- UIActionSheet 修改字体颜色
-(void)willPresentActionSheet:(UIActionSheet *)actionSheet { SEL selector = NSSelectorFromString(@&q ...
- Cocos2d-x 基础元素
看过本章,然后实践之后,应该会掌握以下的认识: 1.Cocos2d-x引擎的基本运转过程 2.Cocos2d-x引擎的一些初始设置 3.对导演及图层及现实对象的认识 4.如何定义自己的显示对象 *:f ...