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 ...
随机推荐
- python爬虫——爬取NUS-WIDE数据库图片
实验室需要NUS-WIDE数据库中的原图,数据集的地址为http://lms.comp.nus.edu.sg/research/NUS-WIDE.htm 由于这个数据只给了每个图片的URL,所以需 ...
- 设计模式总结篇系列:观察者模式(Observer)
观察者模式中通常有两个基本的概念主题:观察者和被观察者.当被观察者状态发生改变时,需要通知相应的观察者,当然,每个被观察者所对应的观察者可能不知一个,他们之间是1:n的关系.用专业一点的术语对观察者模 ...
- iOS 线程相关-----绝对de干货
平时用线程总是知其然,而不知所以然,现在针对涉及到的有关线程的知识体系做了一个系统的整理,由于GCD平时用的也比较多,所以用了大量的空间来讲述这一块,其他的涉及的不是很多,也做了说明,真真切切的是一个 ...
- HTML · 图片热点,网页划区,拼接,表单
图片热点: 规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果. 网页划区: 在一个网页里,规划出一个区域用来展示另一个网页的内容. 网页的拼接: 在一个网络页面内,规划出多 ...
- [iOS] 使用xib作为应用程序入口 with IDE
[iOS] 使用xib作为应用程序入口 with IDE 在「使用xib做为应用程序入口 with Code」这篇文章中,介绍了如何透过写Code的方式,来使用xib做为应用程序的入口.但其实在Xco ...
- JavaScript基础16——js的BOM对象
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- jQuery高级技巧——性能优化篇
通过CDN(Content Delivery Network)引入jQuery库 要提升网站中javascript的性能的最简单的一步就是引入最新版本的jQuery库,新发布的版本通常在性能上会有 ...
- 常用 windows运行命令
winver---------检查Windows版本 wmimgmt.msc----打开windows管理体系结构(WMI) wupdmgr--------windows更新程序 wscript--- ...
- MSCRM 仪表盘 控件 数量 更改(Change the maximum no. of controls on MSCRM Dashboards )
The maximum number of controls allowed on MSCRM dashboards are 6. You cannot put the more than 6 gra ...
- javascript的三个组成部分
javascript是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成: ECMAScript,由ECMA-262定义,提供核心语言功能; 文档对象模型(DOM),提供访问和操作网页内容的 ...