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 ...
随机推荐
- Hazelcast介绍与使用
Hazelcast 是一个开源的可嵌入式数据网格(社区版免费,企业版收费).你可以把它看做是内存数据库,不过它与 Redis 等内存数据库又有些不同.项目地址:http://hazelcast.org ...
- winform(公共控件)
一.客户端设计思路 1.理顺设计思路,架构框架 2.设计界面 3.编写后台代码 4.数据库访问 二.公共控件 1.Button(按钮): ⑴ Enabled :确定是否启用控件 ⑵ Visible:确 ...
- SQLserver2008如何把表格变量传递到存储过程中
在Microsoft SQL Server 2008中,你可以实现把表格变量传递到存储过程中,如果变量可以被声明,那么它就可以被传递.下面我们来具体介绍如何把表格变量(包括内含的数据)传递到存储过程和 ...
- 关于JS闭包,作者不详(转)
说明:本文由两篇文章结合而成,系从他人笔记中转过来的, 具体作者不详.因为觉得不错,遂共享之.如有侵权,立删致歉. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变 ...
- ABAP内表(internal table)有关的系统变量
SY-TABIX – 内表当前行的索引号.SY-TABIX 的值可以被以下命令修改,但是只适用于索引表(index table).对于哈希表(Hashed table),这个系统变量的值为空或0. A ...
- 公司outing选项
Sign up: 2014 Summer Outing 请您从以下三个方案中选择您最感兴趣的一个项目, 如果您不能参加此次summer outing, 请选择"遗憾放弃"- ...
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q66-Q69)
Question 66You have a custom theme named MyTheme. The theme is defined in a file named MyTheme.thmx. ...
- IOS项目集成ShareSDK实现第三方登录、分享、关注等功能。
(1)官方下载ShareSDK iOS 2.8.8,地址:http://sharesdk.cn/ (2)根据实际情况,引入相关的库,参考官方文档. (3)在项目的AppDelegate中一般情况下有三 ...
- Android 网络编程基础之简单聊天程序
前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下 首先是服务端代码: package com.jiao.socketdemo; import java.io.Buffered ...
- 可折叠的ToolBar+抽屉菜单NavigationView+浮动按钮FloatButton
使用Material Design风格的ToolBar和抽屉导航 先看个简单的运行效果 主要记录下布局的写法 1 用到的Google Design依赖和V7包依赖 compile 'com.andro ...