首页 > 其他 > 详细

UVA 1839 Alignment

时间:2014-07-30 20:25:45      阅读:275      评论:0      收藏:0      [点我收藏+]

还是最长上升子序列。。。

本题是求队列中任一士兵都能从左边或者右边看到队伍外;

即某一士兵左边为上升子序列,右边为下降子序列。求两个序列和,再用总数减去;

 

 

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <algorithm>
 5 #define maxn 1005
 6 using namespace std;
 7 
 8 double d[maxn];
 9 int dp[maxn],dp2[maxn];
10 
11 int main (){
12     int n;
13     while (~scanf ("%d",&n)){
14         for (int i=0;i<n;i++)
15             scanf ("%lf",&d[i]);
16         int ans=0;
17         for (int i=0;i<n;i++){
18             dp[i]=1;
19             for (int j=0;j<i;j++){
20                 if (d[j]<d[i])
21                     dp[i]=max (dp[i],dp[j]+1);
22             }
23         }
24         for (int i=0;i<n/2;i++){
25             double temp;
26             temp=d[i];d[i]=d[n-i-1];d[n-i-1]=temp;
27         }
28         for (int i=0;i<n;i++){
29             dp2[i]=1;
30             for (int j=0;j<i;j++){
31                 if (d[j]<d[i])
32                     dp2[i]=max (dp2[i],dp2[j]+1);
33             }
34         }
35         for (int i=0;i<n;i++){
36             for (int j=0;j<n-i-1;j++){
37                 ans=max (ans,dp[i]+dp2[j]);//cout<<i<<":"<<dp[i]<<" "<<j<<":"<<dp2[j]<<endl;
38             }
39         }
40         printf ("%d\n",n-ans);
41     }
42     return 0;
43 }

 

UVA 1839 Alignment,布布扣,bubuko.com

UVA 1839 Alignment

原文:http://www.cnblogs.com/gfc-g/p/3878718.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!