首页 > TAG信息列表 > 花匠
P1970 花匠
题目描述 花匠栋栋种了一排花,每株花都有自己的高度。花儿越长越大,也越来越挤。栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较别致。 具体而言,栋栋的花的高度可以看成一列整数h_1,h_2,...,h_n。设当一部分花被移走后,luogu P1970 花匠 贪心
首先这道题可以用DP模仿最长上升子序列得到80分,然后我们来考虑一下正解应该怎么写。题意可以简化为选择尽可能多的花组成一个波浪型,然后我们我考虑,在每一个波峰上,在不影响后续的情况下,选取尽可能大的情况最顶最优。在波谷上,在不影响后续的情况下,选取尽可能小的情况也一定最优秀。NOIp提高组 2013 花匠
果然,直接DP不做特殊条件判定时,数据规模到一定程度时,必定超时了 看了lei(机房某大佬)的代码,if(dp[i][0]!=1&&dp[i][1]!=1) break; 依然不知是何居心,猜测可能是满足m>1不能同时满足那个条件吧.想不出 接着进一步分析: 受到以前有个题求序列连续和的启发,我们可以这样设计状态: 令f[i][洛谷P1970 花匠
这题标签是dp,但是感觉直接上手模拟就行了。 将花的高度记在一张折线图上。 题意就是求这样一段曲折的数据波动的次数。 对于第一段,取第一段的任何一个点+第一个波峰都不会对答案产生印象。 所以题目的意思就是求一段数据的波峰波谷的数量。 #include<iostream>using namespace s【NOIP2013提高组 day2】花匠
分析 直接贪心(据说动态规划也可以orz) 保留的花要么左右两边高度都比它高,要么左右两边高度都比它低。 因此一段连续上升的序列和一段连续下降的序列只保留一个转折点。 注意答案还要加开头和结尾的点。 代码如下 #include<bits/stdc++.h> using namespace std; const int N