poj-1836 Alignment
来源:互联网 发布:云计算平台storm 编辑:程序博客网 时间:2024/06/07 02:45
题意:有一个队军人排成一排,但是高矮并不安顺序。为了使这个队伍中的任意一个人都可以看到左端或右端,需要让几个人出列。给你一个队列求最少需要出列的人的个数。
思路:因为需要看到队伍的最左端或者最右端这就需要队伍自左向右身高的递增的或者自右向左递增。(注意题目描述与实际要求有出入,题目要求是看到端点的人,而题意为看到队伍物理上的最左或右端,即最左边人的左边为左端,相反也是)所以该题可以用最长上升子序列的思路,两个方向求出最长上升子序列数组,然后枚举所有符合题意的情况,找到队伍中人数最多的那一种。最后与总人数的差值就是解。
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>using namespace std;int main(){ int n,i,j; double arr[1010]; int len1[1011],len2[1011]; int sum,maxx,maxn; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%lf",&arr[i]); } len1[0]=1; for(i=1;i<n;i++) { maxn=0; for(j=0;j<i;j++) { if(arr[i]>arr[j]&&len1[j]>maxn) maxn=len1[j]; } len1[i]=maxn+1; } len2[n-1]=1; for(i=n-2;i>=0;i--) { maxn=0; for(j=i+1;j<n;j++) { if(arr[i]>arr[j]&&len2[j]>maxn) maxn=len2[j]; } len2[i]=maxn+1; } maxx=0; for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(len1[i]+len2[j]>maxx) maxx=len1[i]+len2[j]; } } printf("%d\n",n-maxx); return 0;}
0 0
- POJ 1836 Alignment
- POJ 1836 Alignment
- poj 1836 Alignment
- Poj 1836 Alignment
- poj 1836 Alignment
- POJ 1836-Alignment
- poj 1836 Alignment
- POJ 1836 Alignment
- POJ 1836 Alignment
- POJ 1836 Alignment
- POJ 1836 Alignment
- POJ 1836 Alignment
- POJ 1836 Alignment
- poj 1836 Alignment
- poj 1836 Alignment
- poj 1836 Alignment
- POJ - 1836 Alignment
- poj 1836 Alignment
- 关于社交小技巧,一篇老文章,与大家分享
- 本博客全文目录索引
- hdu 1712 ACboy needs your help
- 集线,路由和交换的概念
- JavaScript解析顺序和变量作用域
- poj-1836 Alignment
- Android中IntentService的原理及使用
- 导航控制器的学习
- android学习 关于用intent 传递数据
- AJAX POST 与 GET 的区别 && HTTP
- Design Pattern_Java:Builder Pattern
- 解决传中文参数乱码的问题
- Key-Value Observing
- poj 2965 The Pilots Brothers' refrigerator