首页 > 其他 > 详细

luogu P1970 花匠 贪心

时间:2019-09-14 22:17:45      阅读:96      评论:0      收藏:0      [点我收藏+]

首先这道题可以用DP模仿最长上升子序列得到80分,然后我们来考虑一下正解应该怎么写。题意可以简化为选择尽可能多的花组成一个波浪型,然后我们我考虑,在每一个波峰上,在不影响后续的情况下,选取尽可能大的情况最顶最优。在波谷上,在不影响后续的情况下,选取尽可能小的情况也一定最优秀。因为尽可能大/小,我们后续的选择余地就更大。所以我们可以进行贪心。

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 int n,ans1,ans2;
 5 int vec[200000];
 6 bool top;
 7 int main()
 8 {
 9     scanf("%d",&n);
10     for (int i = 1;i <= n;i++)
11         scanf("%d",&vec[i]);
12     ans1 = 1;
13     for (int i = 2;i <= n;i++)
14     {
15         if (!top)
16         {
17             if (vec[i] > vec[i - 1])
18             {
19                 ans1++;
20                 top = true;  
21             }
22         }else
23         {
24             if (vec[i] < vec[i - 1])
25             {
26                 ans1++;
27                 top = false;
28             }
29         }
30     }
31     top = true;
32     ans2 = 1;
33     for (int i = 2;i <= n;i++)
34     {
35         if (!top)
36         {
37             if (vec[i] > vec[i - 1])
38             {
39                 ans2++;
40                 top = true;  
41             }
42         }else
43         {
44             if (vec[i] < vec[i - 1])
45             {
46                 ans2++;
47                 top = false;
48             }
49         }
50     }
51     
52     printf("%d\n",max(ans1,ans2));
53     return 0;
54 }

 

luogu P1970 花匠 贪心

原文:https://www.cnblogs.com/iat14/p/11520199.html

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