首页 > 其他分享 >CSP-S/NOIP提高组 真题题解总结

CSP-S/NOIP提高组 真题题解总结

时间:2024-10-02 10:44:18浏览次数:8  
标签:tmp 方案 烹饪 NOIP 真题 题解 状态 优化 dp

DP:

  • 线性dp

    • P1091 [NOIP2004 提高组] 合唱队形

      比较简单的一道题。求出以 \(i\) 结尾的最长上升子序列和以 \(i\) 为头的最长下降子序列,相加 \(-1\) 即可。

    • P1052 [NOIP2005 提高组] 过河

      如果不考虑 \(L\) 的范围,那么就是一道简单的线性 dp 。

      但是 \(L\) 很大,石头数量很少,所以每相邻两个石头的空隙一定很大。

      前置知识:P3951 [NOIP2017 提高组] 小凯的疑惑

      给定两个数 \(p\) 和 \(q\) ,他们最大不能凑出的数是 \((p-1)(q-1)-1\) 。所以中间空隙过多一定是可以被凑出来的,即可以压缩中间的空隙,然后线性 dp 即可。

    • P1006 [NOIP2008 提高组] 传纸条

      求出 \(2\) 条从 \((1,1)\) 到 \((n,m)\) 的路径。重复只算一次,求最大路径和。

      水题,不多赘述。记录 \(dp_{A,B,C,D}\) 表示第一条走到 \((A,B)\) , 第二条走到 \((C,D)\) 。由于 \(A+B = C+D\) ,可以记录他们的和,优化掉一维。

    • P1541 [NOIP2010 提高组] 乌龟棋

      记录 \(dp_{A,B,C,D}\) 表示用了 \(A\) 个 \(1\) 号卡片, \(B\) 个 \(2\) 号卡片, \(C\) 个 \(3\) 号卡片, \(D\) 个 \(4\) 号卡片。

      暴力转移即可 \(F_{A,B,C,D}=\max (F_{A-1,B,C,D},F_{A,B-1,C,D},F_{A,B,C-1,D},F_{A,B,C,D-1})+cost_{A+2B+3C+4D}\)

    • P2679 [NOIP2015 提高组] 子串

      前缀和优化线性 dp。(推式子题)

      首先考虑如何 DP,然后再考虑如何优化。

      状态表示:\(f_{i, j, k}\)表示只用 \(S\) 的前 \(i\) 个字母,选取了 \(k\) 段,可以匹配 \(T\) 的前 \(j\) 个字母的方案数。

      状态计算:将 \(f_{i,j,k}\)表示的所有方案分成两大类:

      • 不用 \(S_i\),则方案数是 \(f_{i-1,j,k}\);
      • 使用 \(S_i\),则方案数是 $ \sum f_{i-t,j-t,k-1}$,满足 \(S_{i-t+1}=T_{i-t+1}\),\(t\) 从大到小枚举。

      时间复杂度是 $ \mathcal{O} (nm2k)$。

      我们发先 \(f_{i,j,k}\) 的第二项和 \(f_{i-1,j-1,k}\) 很像,可以考虑维护一个 \(tmp_{i,j,k}\)

      • \(S_i=T_j\) , \(tmp_{i,j,k}=tmp_{i-1,j-1,k}+f_{i-1,j-1,k-1}\) 。
      • \(S_i \neq T_j\),\(tmp_{i,j,k}=0\) 。

      (把式子展开可以发现 \(tmp\) 的规律)。

      然后空间会爆,写滚动数组或者 01背包 倒序枚举优化掉第一维即可。

    • P5664 [CSP-S2019] Emiya 家今天的饭

      求解所有方案数

      \(f_{i,j}\) 表示前 \(i\) 种烹饪方式,做了 \(j\) 道菜的方案数。

      • 状态转移:
        第 \(i\) 种烹饪方式不做 \(f_{i,j}+= f_{i - 1,j}\)

      • 第 \(i\) 种烹饪方法做 \(1\) 道主要食材是 \(k\) 的菜:\(f_{i,j} += f_{i-1,j-1} * a_{i, k}\)

      所有方案数量 $ A = \sum_{j = 1}^{n}f[n][j]$ 。

      求解不合法方案:

      \(dp_{i,j}\) 表示前 \(i\) 中烹饪方法,越界食材数 $ - $ 其他食材数 为 \(j\) 的方案数。

      状态转移:

      • 第 \(i\) 种烹饪方法不选:\(dp_{i,j} += dp_{i-1,j}\)

      • 选越界食材 \(c\):\(dp_{i,j} += dp_{i-1,j-1} * a_{i, c}\)

      • 选其他食材 \(dp_{i,j} += dp_{i-1,j+1} * (s_i - a_{i, c})\)

      所有方案数量: $ B = \sum dp_{n,j} (j > 0)$ 。

      \(A-B\) 即可。

      时间复杂度 \(\mathcal{O}(n ^ 2m)\) 。

      \(Tips\):
      做差有可能为负数,把所有状态加一个 \(+n\) 的偏移量即可。

    • 总结

      对于线性 dp的问题,一般状态定义为 \(f_{前\ i\ 个,满足 \ ....\ 状态}\),状态可能很多,所以可能有很多维。

      状态转移:考虑这个集合是由谁构成的,进行分类。比如分成 选 \(a\) 和不选 \(a\) ......

      优化:如果状态过多,考虑滚动数组或者背包优化,转移中有求和,求最值等考虑用前缀和,单调队列优化。

  • 区间dp

  • 背包

  • 状压dp

  • 树形dp

  • 倍增优化dp

贪心:

搜索:

  • DFS

  • BFS

  • 剪枝

数学:

  • 数论:

  • 组合数学

图论:

  • 拓扑排序

  • LCA

  • 最短路

  • 二分图

数据结构:

  • 并查集

  • 线段树

  • 单调队列

基础算法:

  • 枚举

  • 模拟

  • 字符串

  • 排序

  • 二分

  • 位运算

  • 构造

  • 哈希

  • 找规律

标签:tmp,方案,烹饪,NOIP,真题,题解,状态,优化,dp
From: https://www.cnblogs.com/fanrunze/p/18444486

相关文章

  • 区间 题解
    题意简述求长度为\(n\)的序列\(a\)的最长连续子序列\([l,r]\),满足\(\existsi\in[l,r],\gcd(a_l,\ldots,a_r)=a_i\)。\(1\leqn\leq4\times10^6\),\(1\leqa_i\leq10^{18}\)。题目分析根据\(\gcd(a,b)=a\)等价于\(b\bmoda=0\),这个区间的限......
  • YC342A [ 20240922 CQYC NOIP 模拟赛 T1 ] 前缀(lcp)
    题意给定\(n,m\)以及长为\(n\)的字符串\(S\)。你需要构造字符串\(T\)使得\(\sumLCP(S,T[i,...,m])\)最大。求出这个最大值。\(n,m\le5\times10^3\)。Sol首先不难发现答案一定可以由若干\(S\)的前缀拼成。考虑找到最小的无法被拆为前缀的子段,显然这个......
  • 题解 P2726 【[SHOI2005]树的双中心】
    首先,我们会有一个很简单的想法,枚举断边,产生两棵子树,然后在两棵树内分别求带权重心,计算贡献,这样的话复杂度是\(O(n^2)\)的。那么我们要好好利用$h\leq100$的性质。考虑\(sze[u]\)为带权重量,\(g[u]\)为以\(u\)为根的树,所有点都到\(u\)的代价。所以\(g[u]=\sum\l......
  • AT_abc373_e 的题解
    (一)二分套二分。(感觉是一个很麻烦的做法。)题目问的是让额外给的票最少,考虑二分答案。设二分的答案为\(x\),该候选人原来的得票为\(v\),想要超过他至少要\(x+v+1\)。同时用前缀和维护区间和。第一种情况为该候选人在前\(m\)个人中,如下图所示。绿色箭头为被讨论的人,蓝色箭......
  • 优美函数 题解
    题意简述给你函数\(f\):\[f(x,y,u)=\left\{\begin{array}{rcl}u-y,&x=1\\u,&1<x\ley,\\gcd(x,y)=1\\-x\cdoty,&x\neq1,\\gcd(x,y)=x\\0,&\text{otherwise}.\end{array}\right.\]对于一个长度为\(n\)的序列......
  • ABC 模拟赛 | A Passing Contest 001题解记录(A,B,C,D)
    比赛链接https://www.luogu.com.cn/contest/126344[APC001]A-CT不必多说,多次取模#include<iostream>#include<algorithm>#include<string>#include<string.h>#include<queue>#include<deque>#include<math.h>#include<map>......
  • CF1214G Feeling Good 题解
    题目链接点击打开链接题目解法我真菜啊,感觉每一步都不难,但一步都没想到/yun考虑两行\(x,y\)什么时候可以构造出合法的矩形?即\(x\)中需要有\(y\)对应位置为\(0\)的\(1\),\(y\)中需要有\(x\)对应位置为\(0\)的\(1\)归纳一下,\(x\)不是\(y\)的子集且\(y\)不......
  • CF2018E2 Complex Segments (Hard Version) 题解
    题目描述\(T\)组数据,给定\(n\)条线段\([l_i,r_i]\),称一个线段集合是复杂的,当且仅当:它可以被划分成若干个大小相等的线段组。两条线段相交当且仅当它们在同一组。求用这\(n\)条线段构成的复杂线段集合的最大值。数据范围\(1\len,\sumn\le3\cdot10^5\)。\(1\l......
  • CF280C Game on Tree题解
    题目描述给定一棵有根树,结点编号从1到n。根结点为1号结点。对于每一次操作,等概率的选择一个尚未被删去的结点并将它及其子树全部删去。当所有结点被删除之后游戏结束。也就是说,删除1号结点后游戏即结束。要求求出删除所有结点的期望操作次数。不是哥们,我好不容易国庆......
  • A. 2025--[炼石计划--NOIP模拟三]--T1--矩形
    赛时草了个\(O(n^4\log(n))\)竟然能过70分虽然本来就是这么分配的,发现正解只需将二分改为双指针就可以了,最气的是上面计算的时候用到还是尺取下面就用的二分(唐诗)。其实这题就是暴力,然后在低级的暴力上加一些操作变得稍微高级一点。计算的话直接暴力查找不同颜色,只不过范围......