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 }

 

你可能感兴趣的:(poj)