`

poj 1836

 
阅读更多

是POJ2533的扩展题。题意不难,令到原队列的最少士兵出列后,使得新队列任意一个士兵都能看到左边或者右边的无穷远处。就是使新队列呈三角形分布就对了。士兵的排列就是如附件所示所示:图片中的蓝色士兵的身高和红色士兵的身高是完全没有关系的。

要求最少出列数,就是留队士兵人数最大,如图:


即左边的递增序列人数和右边的递减序列人数之和最大因而可转化为求“最长不降子序列”和“最长不升子序列”问题。进一步转化为从头部求出最长不下降子序列与从尾部求出最长不下降子序列即可,分别求出二者的大小,最后用队列长度减去二者之和就是我们所求的出列的士兵个数。

具体代码如下:

 

#include <iostream>
using namespace std ;
const int MAX = 1005 ;
double m[MAX] ;
int dp1[MAX] , dp2[MAX] ;
int main()
{
	// freopen( "e:\\in.txt" , "r" , stdin ) ;
	int n ;
	while ( cin >> n )
	{
		int i , j ;
		for ( i = 1 ; i <= n ; i++ ) 
		{
			cin >> m[i] ;
		}
		memset( dp1, 0,sizeof( dp1 ) ) ;
		memset( dp2, 0,sizeof( dp2 ) ) ;
		dp1[1] = 1 ;//从头开始计算最长的递增序列
		for ( i = 2 ; i <= n ; i++ )
		{
			dp1[i] = 1 ;
			for ( j = i-1 ; j >= 1 ; j-- )
			{
				if ( m[j] < m[i] && dp1[i] < dp1[j]+1 )
				{
					dp1[i] = dp1[j]+1 ;
				}
			}
		}
		dp2[n] = 1 ;//从尾部计算最长的递增序列
		for ( i = n-1 ; i >= 1 ; i-- )
		{
			dp2[i] = 1 ;
			for ( j = i+1 ; j <= n ; j++ )
			{
				if ( m[j] < m[i] && dp2[i] < dp2[j]+1 )
				{
					dp2[i] = dp2[j]+1 ;
				}
			}
		}
		int ans = dp1[n] ;//初始化ans
		for ( i = 1 ; i < n ; i++ )
		{
			for ( j = i+1 ; j <= n ; j++ )
			{
				if ( dp1[i] + dp2[j] > ans )
					ans = dp1[i] + dp2[j] ;
			}
		}
		cout << n-ans << endl ;
	}
	return 0 ;
}

 

 

 

 

 

 

 

  • 大小: 8.4 KB
分享到:
评论

相关推荐

    POJ1836-Alignment

    【标题】"POJ1836-Alignment"是一道源于北京大学在线编程平台POJ的算法竞赛题目。这道题目要求参赛者编写程序解决一种排列对齐问题,以实现优化的计算策略。 【描述】"北大POJ1836-Alignment"是一个典型的计算机...

    北大POJ1836-Alignment【O(nlogn)】

    北大POJ1836-Alignment【O(nlogn)】

    POJ算法题目分类

    * 型如下表的简单 DP:型如下表的简单 DP 是指解决问题的简单 DP 算法,如 poj3267、poj1836、poj1260、poj2533。 * 计算几何学:计算几何学是指解决问题的计算几何学算法,如 poj2031、poj1039。 六、数学 数学...

    poj题目分类

    * 类型 DP:例如 poj3267、poj1836、poj1260、poj2533。 中级 1. 基本算法: * C++的标准模版库的应用:例如 poj3096、poj3007。 * 较为复杂的模拟题的训练:例如 poj3393、poj1472、poj3371、poj1027、poj2706...

    poj训练计划.doc

    - 简单DP:如`poj3267, poj1836`。 - **数学** - 组合数学:如`POJ3252, poj1850`。 - 数论:如`poj2635, poj3292`。 #### 第二阶段中级训练计划 #### 第3周至第4周(共85题) - **进阶算法** - C++标准模版...

    POJ 分类题目 txt文件

    例如,题目poj3267和poj1836就属于动态规划问题,其中poj1836需要通过动态规划找到最优的编辑距离。 ### 5. 数学算法 数学算法涵盖代数、几何、数论等多个领域,常见的有组合数学、概率统计、矩阵运算等。数论中...

    acm训练计划(poj的题)

    - (poj3267, poj1836, poj1260, poj2533):零一背包、完全背包等问题的解决方案。 3. **二维动态规划**: - (poj3176, poj1080, poj1159):多维状态转移方程的应用。 ### 五、组合数学 1. **排列组合基础**: ...

    acm poj300题分层训练

    5. **动态规划**和**数学**:poj1837、poj1276是简单的动态规划问题,poj3267、poj1836等进一步强化了DP,poj3252、poj1850等则涉及组合数学,poj2635、poj3292等训练了数论知识。 **中级阶段**则更加强调复杂算法...

    经典 的POJ 分类

    - POJ 3267、POJ 1836:多维状态转移方程。 - POJ 1260、POJ 2533:涉及多个变量的状态转移。 - POJ 3176、POJ 1080:复杂的状态空间定义与状态转移。 ### 数学问题 #### 组合数学 - **题目示例**: - POJ ...

    acm新手刷题攻略之poj

    ### ACM新手刷题攻略之POJ ... - 推荐题目:[poj3267](https://vjudge.net/problem/POJ-3267)、[poj1836](https://vjudge.net/problem/POJ-1836)、[poj1260](https://vjudge.net/problem/POJ-1260)、[poj2533]...

    ACM-POJ 算法训练指南

    1. **凸包**:构建点集的凸包(poj3267, poj1836, poj1260, poj2533)。 2. **线段交**:计算线段是否相交及交点位置(poj3176, poj1080, poj1159)。 ### 七、概率统计 1. **概率计算**:计算随机事件的概率(POJ...

    POJ 分类题目

    - poj1836 - poj1260 - poj2533 - poj3176 - poj1080 - poj1159 - **应用场景**:适用于路径规划、编辑距离计算等问题。 #### 六、数学 **1. 组合数学** - **定义**:研究离散对象的计数方法。 - **示例题目...

    ACMer需要掌握的算法讲解 (2).docx

    * DP算法:POJ3267、POJ1836、POJ1260、POJ2533 二、图算法 * 度限制最小生成树和第K最短路:POJ1639、POJ3216、POJ2446 * 最优比率生成树:POJ2728 * 最小树形图:POJ3164 * 次小生成树 * 无向图、有向图的最小环...

    ACM常用算法及其相应的练习题.docx

    * 类似表的简单 DP:poj3267, poj1836, poj1260, poj2533 * 最长公共子序列:poj3176, poj1080, poj1159 * 最优二分检索树问题 六、数学 * 组合数学: + 加法原理和乘法原理 + 排列组合 + 递推关系 - poj3252...

    ACM 详解算法目录

    例如,POJ1837和POJ1276是背包问题的典型例题,而POJ3267和POJ1836则是简单DP的经典例题。 数学部分涵盖了组合数学、数论和计算方法三方面。例如,POJ3252和POJ1850是组合数学的代表题,而POJ2635和POJ3292则是数论...

    ACM常用算法及其相应的练习题 (2).docx

    (2) 简单DP:poj3267, poj1836, poj1260, poj2533 (3) 其他DP问题: 六、中级算法 本部分涵盖了中级算法,包括C++的标准模版库的应用、较为复杂的模拟题的训练、差分约束系统的建立和求解、最小费用最大流、双连通...

    ACM算法总结大全——超有用!

    2. 简单动态规划:如表格形式的DP问题,如poj3267、poj1836等。 3. 最长公共子序列:如poj3176、poj1080等。 4. 最优二分检索树问题:如poj1159。 六、数学 1. 组合数学:加法原理、乘法原理、排列组合和递推关系,...

    北大acm试题

    poj1837和poj1276是背包问题的实例,而型如下表的简单DP问题,如poj3267、poj1836、poj1260和poj2533,以及最长公共子序列问题(如poj3176、poj1080和poj1159)都是动态规划的典型应用。 六、数学 数学在编程竞赛中...

    ACM 经验 笔记 很有用的经验指导

    - **表格形式的简单DP**:如 poj3267、poj1836。 - **最长公共子序列**:如 poj3176、poj1080。 6. **数学**: - **组合数学**: - 加法和乘法原理。 - 排列组合。 - 递推关系。 - **数论**: - 素数与整除...

    ACM常用算法及其相应的练习题 (2).pdf

    例题:poj3267、poj1836、poj1260、poj2533。 六、数学 * 组合数学:组合数学是指研究counting和enumeration的数学分支。例题:poj3252、poj1850、poj1019、poj1942。 * 数论:数论是指研究整数和其他数学对象的...

Global site tag (gtag.js) - Google Analytics