http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28415#problem/F

题目大意:有n个士兵排成一列,将军想从中抽出最少人数使队伍中任何士兵都能够看到左边最远处或右边最远处

解题思路:①此题是最长上升子序列的升级版。

②这里先介绍一下最长上升子问题(LIS):给定n个数从右往左选出尽量多的数,组成一个上升子序

列,相邻的不能相等 ——> 设d[i]表示以第i个数结尾的最长上升子序列,则状态转移方程为:d[i]=

max{0,d[j]|j<i,a[j]<a[i]},答案是max{d[i]};

③此题可从左往右求出d[](代码里为b[]),再从右往左求出d[](代码里为c[]),答案就是max{b[i]+c[j]

| i<j}

#include<iostream>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
int main(){ double a[];
int b[],c[]; for(int n;cin>>n&&n;){ for(int i=;i<n;i++){ //输入身高数据a[]并正向计算以第i个结尾的LIS对应为b[i]
cin>>a[i];
int max=-;
for(int j=;j<i;j++){
if(a[i]>a[j]&&b[j]>max){
max=b[j];
}
}
if(max==-)b[i]=;
else b[i]=max+;
}
for(int i=n-;i>=;i--){ //逆向计算以第i个结尾的LIS对应为c[i]
int max=-;
for(int j=n-;j>i;j--){
if(a[i]>a[j]&&c[j]>max){
max=c[j];
}
}
if(max==-)c[i]=;
else c[i]=max+;
} double maxtotal=-; //计算b[i]+c[j] && i<j 的最大值
for(int i=;i<n;i++){
for(int j=n-;j>i;j--){
int sum=b[i]+c[j];
if(sum>maxtotal){
maxtotal=sum;
}
}
} cout<<n-maxtotal<<'\n'; //输出挑出的最少人数
}return ;
}

[ACM_动态规划] Alignment (将军排队)的更多相关文章

  1. [ACM_动态规划] 轮廓线动态规划——铺放骨牌(状态压缩1)

    Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, af ...

  2. [ACM_动态规划] UVA 12511 Virus [最长公共递增子序列 LCIS 动态规划]

      Virus  We have a log file, which is a sequence of recorded events. Naturally, the timestamps are s ...

  3. [ACM_动态规划] Palindrome

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28415#problem/D 题目大意:给一个长为n的字符串,问最少插入几个字符成回文串 ...

  4. [ACM_动态规划] 找零种类

    问题描述:假设某国的硬币的面值有 1.5.10.50 元四种,输入一个金额 N (正整数,N<=1000),印出符合该金额的硬币组合有多少种. 问题分析: 1.5.10 元组合出 N 元的方法数 ...

  5. [ACM_动态规划] 最长上升子序列(LIS)

    问题描述:给n个数,找出最长子序列并输出 问题分析:本题是DAG(有向无环图)最长路问题,设d[i]为以i结尾的最长链的长度,则状态转移方程为:d[i]=max{0,d[j]|j<i & ...

  6. [ACM_动态规划] 嵌套矩形

    问题描述:有n个矩阵,每个矩阵可以用两个整数a,b来表示 ,表示他的长和宽,矩阵X (a,b) 可以 嵌套 到Y (c,d) 里面当且仅当 a < c &&  b < d  ...

  7. [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索

    1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...

  8. [ACM_动态规划] 数字三角形(数塔)

    递归方法解决数塔问题 状态转移方程:d[i][j]=a[i][j]+max{d[i+1][j],d[i+1][j+1]} 注意:1\d[i][j]表示从i,j出发的最大总和;2\变界值设为0;3\递归 ...

  9. [ACM_动态规划] ZOJ 1425 Crossed Matchings(交叉最大匹配 动态规划)

    Description There are two rows of positive integer numbers. We can draw one line segment between any ...

随机推荐

  1. arch 安装图形界面

    图形界面的安装.--- 引导: .显卡驱动,这里我们是集成显卡,根据wiki提示安装xf86-video-intel .安装xorg-server,xorg-server-utils,xorg-xin ...

  2. EF支持mysq相关配置数码

    最近,项目考虑到安装部署方面:希望可以使用MySQL数据库,毕竟比较小巧.方便. 后来,自己通过测试发现EF可以支持mysql数据库,而且也可以通过codefirst模式进行开发:使用起来,跟sqls ...

  3. webservice jsonp格式调用

    前端  $.ajax({            type: "get",            url: "http://baiduzd.yihu.com.cn/APIS ...

  4. 性能测试之--Apache JMeter安装

    Hi,今天给大家分享一下安装JMeter的相关内容~ Apache JMeter 是Apache组织的开源项目,是一个100%纯Java桌面应用,用于压力测试和性能测试. 它能够对HTTP.FTP服务 ...

  5. python基础第三天(1)

    函数 函数分为:内置函数,自定义函数,导入函数. 内置函数 python为咱们提供的快捷方式 vars()---针对脚本的,找到这个脚本中的所有变量. #!/usr/bin/env python # ...

  6. iOS 单例模式

    主要用于做应用程序的资源共享控制.用途很多⋯⋯ 实质为,单例是在程序声明周期里 有且仅有 被实例化过一次的类.为确保实例化的唯一,利用类的 类(static)方法来生成和访问对象. 至此,你便可以在程 ...

  7. 关于L'Hopital法则

    1.首先需要使用 罗尔定理 函数f(x)在闭区间[a,b]连续在开区间(a,b)可微,如果f(a)=f(b),那么至少存在一点c使函数导数f'(c)=0 注意需要再(a,b)可微,如果函数有角点,断点 ...

  8. iptables之LOG目标 被拦截包分析

    iptables之LOG目标 问题 在iptables的INPUT链中发现有大量未知包被拦截,这种情况就有两种可能,一是自己的某个服务的iptables端口没有打开,二是服务器正在遭受攻击 分析 这就 ...

  9. testlink简单部署

    CentOS+LAMP+testlink 环境 系统 CentOS6.5 软件 testlink-1.9.14 IP 192.168.0.158 部署 LAMP环境搭建 remi配置 wget htt ...

  10. JAVA里面的IO流(一)分类1(字节/字符和输入/输出)

      java.io包中定义了多个流类型(流或抽象类)来实现输入/输出功能:可以从不同的角度对其进行分类: 按数据流的方向不同可以分为输入流和输出流 从文件读数据为输入流:往文件写数据为输出流 按处理数 ...