码迷,mamicode.com
首页 > 其他好文 > 详细

POJ-1836 Alignment---LIS

时间:2018-05-08 20:08:15      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:mat   clu   题目   algo   href   code   i++   std   lan   

题目链接:

https://cn.vjudge.net/problem/POJ-1836

题目大意:

题意:令到原队列的最少士兵出列后,使得新队列任意一个士兵都能看到左边或者右边的无穷远处。就是使新队列呈三角形分布就对了。

解题思路:

求出每一位结束的最长上升子序列和每一位开始的最长下降子序列,求出最大值,然后用队伍长度减去即可。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<queue>
 7 #include<stack>
 8 #include<map>
 9 #include<sstream>
10 using namespace std;
11 typedef long long ll;
12 int dp1[1005], dp2[1005];
13 double a[1005];
14 int main()
15 {
16     int n;
17     cin >> n;
18     for(int i = 1; i <= n; i++)cin >> a[i], dp1[i] = 1, dp2[i] = 1;
19     for(int i = 1; i <= n; i++)
20     {
21         for(int j = 1; j < i; j++)
22             if(a[i]>a[j])dp1[i] = max(dp1[i], dp1[j] + 1);
23     }
24     for(int i = n; i >= 1; i--)
25     {
26         for(int j = n; j > i; j--)
27             if(a[i]>a[j])dp2[i] = max(dp2[i], dp2[j] + 1);
28     }
29     int ans = 0;
30     for(int i = 1; i <= n; i++)
31         for(int j = i + 1; j <= n; j++)
32         ans = max(dp1[i] + dp2[j], ans);
33     cout<<n - ans<<endl;
34 }

 

POJ-1836 Alignment---LIS

标签:mat   clu   题目   algo   href   code   i++   std   lan   

原文地址:https://www.cnblogs.com/fzl194/p/9010593.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!