首页 > 其他分享 >题解:P1970 [NOIP2013 提高组] 花匠

题解:P1970 [NOIP2013 提高组] 花匠

时间:2025-01-11 22:22:31浏览次数:1  
标签:le NOIP2013 int 题解 end cases 500005 P1970

闲话

本文同步发布在 cnblogs

正题

容易发现此题要求花必须一高一低摆放。

最优化问题,看不出怎么贪心,遂 DP。

设计状态

\(f_{i, 0}\) 表示当前为上升形势最长花序列,\(f_{i, 1}\) 表示当前为下降形势最长花序列。

状态转移

由于需要一高一低,易得:

\[f_{i, 0} = \begin{cases} f_{i - 1, 0}&a_i \le a_{i-1}\\ f_{i - 1, 1} + 1&a_i > a_{i-1}\\ \end{cases} \]

\[f_{i, 1} = \begin{cases} f_{i - 1, 1}&a_i > a_{i-1}\\ f_{i - 1, 0} + 1&a_i \le a_{i-1}\\ \end{cases} \]

直接实现即可。

Code:

#include<bits/stdc++.h>
using namespace std;
int n, a[500005], f[500005][2];
int main(){
    cin >> n;
    for(int i = 1; i <= n; i ++) cin >> a[i];
    f[1][0] = f[1][1] = 1;//边界处理
    for(int i = 2; i <= n; i ++){
        f[i][0] = f[i - 1][0]; f[i][1] = f[i - 1][1];//转移公式第一项
        if(a[i] > a[i - 1]) f[i][0] = f[i - 1][1] + 1;//转移公式第二项
        if(a[i] < a[i - 1]) f[i][1] = f[i - 1][0] + 1;//转移公式第二项
    }
    cout << max(f[n][0], f[n][1]);
	return 0;
}

标签:le,NOIP2013,int,题解,end,cases,500005,P1970
From: https://www.cnblogs.com/zhangzirui66/p/18666280

相关文章

  • P3247 [HNOI2016] 最小公倍数 题解
    \(\text{P3247[HNOI2016]最小公倍数题解}\)第一眼上去没什么明显的思路。图上问题一般没有什么好的多项式复杂度算法来解决。观察数据范围,注意到\(n,q\le5\times10^4\),是一个典型的根号复杂度算法,于是考虑分块来处理。注意到所求的不一定是简单路径,也就是在不超过所需要的......
  • P10200 花神诞日 题解
    P10200[湖北省选模拟2024]花神诞日题解首先注意到一个集合中两两异或和的最小值就是,排序后相邻两个数异或和的最小值。证明可以考虑放到01-Trie上,从高往低位建树,求一个数与之异或的最小值,就是使高位相同位数尽可能多,则就是01-Trie上的前一个叶子或后一个叶子。由此,我们......
  • 题解:P2296 [NOIP2014 提高组] 寻找道路
    条件第一步,要能到达\(t\)点,建反图跑一遍。记录哪些点可行。第二步,扫描每个点,若其旁边均为标记过的,说明点的出边所指向的点都直接或间接与终点连通。记录这个点第二次第三步,在原边枚举每条边,若两个节点均被记录了第二次,加入一个新图,否则扔掉。对新图进行BFS即可。代码:#inc......
  • 题解:P2822 [NOIP2016 提高组] 组合数问题
    组合数,还是多测,考虑预处理所有答案。组合数的递推公式如下,证明在本文底部:\[C_{i,j}=C_{i-1,j}+C_{i-1,j-1}\]由于求的是是否能被\(k\)整除,转化式子为:\[C_{i,j}=(C_{i-1,j}+C_{i-1,j-1})\bmodk\]易得若\(C_{i,j}=0\)即为可整除。但这样每次......
  • 洛谷B3733 [信息与未来 2017] 基因组分析密码锁题解
    [信息与未来2017]密码锁题目描述乌龟给自己的贵重物品上了密码锁。密码锁上有5 个数字拨盘。每个数字拨盘每次向上拨使数字增加1 (9 向上拨得到0),向下拨使数字减少1 (0 向下拨得到9)。拨盘上的数字组成一个5 位数。只要拨盘上的数字变为素数,密码锁就会被解开。素......
  • CF1759F题解
    BriefDescription给你一个\(n\)位的\(p\)进制数,第\(i\)位为\(a_i\)。请问最少要让该数加多少次\(1\),可以让数码\(0,\cdots,p−1\)都出现过(包含在中间过程出现)。Solution因为是\(p\)进制,不难发现答案一定不会超过\(p−1\),也就是说在最坏情况下就是其最后一位加至......
  • THUPC 2025 初赛 部分题题解
    持续更新中,目前只有\(\texttt{A,D,G,H,I,M}\)题题解。A.骑行计划题目描述小Rei有\(n\)天的假期,第\(i\)天她要骑行\(s_i\)分钟,每分钟骑行费用为\(c\)元。有\(m\)种骑行卡,第\(i\)种骑行卡售价\(w_i\)元,有效期\(d_i\)天,免费时间\(t_i\)分钟。小Rei可以......
  • AT_aising2020_f 题解
    AT_aising2020_fTwoSnuke题意:对于一个十元组\((a_1,a_2,b_1,b_2,c_1,c_2,d_1,d_2,e_1,e_2)\),定义它合法当且仅当满足下列条件:\(0\lea_1<a_2\)\(0\leb_1<b_2\)\(0\lec_1<c_2\)\(0\led_1<d_2\)\(0\lee_1<e_2\)\(a_1+a_2+b_1+b_2+c_1+c_......
  • AT_abc248_h [ABC248Ex] Beautiful Subsequences 题解
    题目传送门前置知识树状数组|序列分治解法考虑序列分治,设因\(\max\)和\(\min\)形成的分节点先后为\(k_{1},k_{2}\)。对于\(j\in(mid,k_{1}]\),等价于统计满足\(\max\limits_{h=i}^{mid}\{a_{h}\}-\min\limits_{h=i}^{mid}\{a_{h}\}\lej-i+k\)的\(j\)的......
  • 题解:CF1031F Familiar Operations
    传送门Solution之前有遇到类似的题,第一步先考虑转化操作和问题。对于每个数质因数分解成\(\prod{p_i^{\alpha_i}}\),我们所需要的只有\(\alpha_i\),因为只要求因子个数相同。记其为\(S_i=\{\alpha_1,\alpha_2,\dots,\alpha_k\}\),其中\(\alpha_1\geq\alpha_2\geq\dots......