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

 

posted @ 2013-08-23 10:02  Anti-Magic  阅读(138)  评论(0编辑  收藏  举报