POJ 1836 Alignment 水DP

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

没读懂题,以为身高不能有相同的,没想到排中间的两个身高是可以相同的。。

 1 #include <stdio.h>

 2 #include <string.h>

 3 #include <iostream>

 4 

 5 int dpr[1010], dpl[1010];

 6 int main()

 7 {

 8     int n;

 9     double num[1010];

10     while(scanf("%d", &n) != EOF)

11     {

12         for(int i = 1; i <= n; i++)

13         {

14             std::cin >> num[i];

15         }

16         dpr[1] = 1;

17         for(int i = 2; i <= n; i++)

18         {

19             int m = 0;

20             for(int j = 1; j < i; j++)

21             {

22                 if(dpr[j] > m && num[j] < num[i])

23                 {

24                     m = dpr[j];

25                 }

26             }

27             dpr[i] = m + 1;

28         }

29 

30         dpl[n] = 1;

31         for(int i = n-1; i >= 1; i--)

32         {

33             int m = 0;

34             for(int j = n; j > i; j--)

35             {

36                 if(dpl[j] > m && num[j] < num[i])

37                 {

38                     m = dpl[j];

39                 }

40             }

41             dpl[i] = m + 1;

42         }

43         int ans = n;

44         for(int i = 1; i <= n; i++)

45         {

46             int cnt = n - dpr[i] - dpl[i] + 1;

47             if(cnt < ans)

48             {

49                 ans = cnt;

50                 for(int j = i+1; j <= n; j++)

51                 {

52                     if(num[j] == num[i] && dpl[j] == dpl[i])

53                     {

54                         ans--;

55                         break;

56                     }

57                 }

58             }

59         }

60         printf("%d\n", ans);

61     }

62     return 0;

63 }
View Code

 

你可能感兴趣的:(poj)