poj1836Alignment

http://poj.org/problem?id=1836

打了一堆 网络连接失败 。。不打了

View Code
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<stdlib.h>
 5 #include<algorithm>
 6 using namespace std;
 7 int dp1[1010],dp2[1010],h[1010];
 8 int main()
 9 {
10     int i,j,k,n;
11     double he[1010];
12     while(cin>>n)
13     {
14         memset(dp1,0,sizeof(dp1));
15         memset(dp2,0,sizeof(dp2));
16         for(i = 1 ; i <= n ; i++)
17         cin>>he[i];
18         dp1[1] = 1;
19         int tmax = 0;
20         for(i = 2; i <= n ; i++)
21         {
22             for(j = 1 ; j < i ; j++)
23             {
24                 if(he[i]>he[j])
25                 dp1[i] = max(dp1[j],dp1[i]);
26             }
27             dp1[i]++;
28         }
29         dp2[n] = 1;
30         for(i = n-1 ; i >= 1 ; i--)
31         {
32             for(j = n ; j > i ; j--)
33             {
34                 if(he[i]>he[j])
35                 dp2[i] = max(dp2[i],dp2[j]);
36             }
37             dp2[i]++;
38         }
39        /* for(i = 1; i <= n ; i++)
40         cout<<dp1[i]<<" "<<dp2[i]<<endl;*/
41         tmax = 0;
42         for(i = 1; i <= n ; i++)
43         {
44             h[i] = dp1[i]+dp2[i]-1;
45             for(j = i+1 ; j <= n ; j++)
46                 if(he[i]==he[j]&&i!=1&&j!=n)
47                 {
48                     if(h[i]<dp1[i]+dp2[j])
49                        h[i] = dp1[i]+dp2[j];
50                 }
51             if(tmax<h[i])
52             tmax = h[i];
53         }
54         cout<<n-tmax<<endl;
55     }
56     return 0;
57 }

 

posted @ 2013-01-29 23:18  _雨  阅读(152)  评论(0编辑  收藏  举报