![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
洛谷
自闭自闭自闭了
这个作者很懒,什么都没留下…
展开
-
P1880 [NOI1995] 石子合并 && 区间dp
区间dp模板,f[i][j]表示[i, j]中最大得分,由于是环,可以把它展开成链,每次合并得分就是两堆的石子总数,很容易得到状态转移方程,f[i][j] = max(f[i][j], f[i][k] + f[k + 1][j] + d(i, j))#include<bits/stdc++.h>using namespace std;#define rep(i,x,y); for(int i=x;i<=y;i++)#define dec(i,x,y); for(int i...原创 2022-02-16 20:07:43 · 191 阅读 · 0 评论 -
P5020 [NOIP2018 提高组] 货币系统
【传送门】[NOIP2018 提高组] 货币系统 - 洛谷(n,a)系统和(m,b)系统等价,即(n,a)系统中可以组成的面值和(m,b)一模一样,也就是说当a[]数组中所有的值,都可以用b[]数组中的面值表示出来。怎么得到b[]数组呢?a[]中最小值x肯定与b[]中最小值相同,所以x加入b[]中,然后看a[]中次小y,能不能用x组成,若不能,加入y,差不多这样循环下去。看下数据规模,就是背包dp具体解释看代码:#include<bits/stdc++.h>u..原创 2022-02-13 21:59:35 · 379 阅读 · 0 评论 -
P1020 [NOIP1999 普及组] 导弹拦截
(可能我蒟蒻,所以觉得不简单)首先我们可以把它抽象成两个问题 :一个求最长不上升子序列一个求最长上升子序列会了最长上升子序列问题一自然会了取mx为a[]数组的最大值 ,想象有标号依次为1--mx的桶,定义t[j](1<=j<=mx)为以数j结尾的最长递增序列长度每当查询a[i]前面有多少数时,遍历前面的1~a[i],取x = max(t[j])+1(1<=j<a[i]),x即为以a[i]结尾的最长子序列长度同时遍历a[i]+1~maxi的桶,若该桶的值比原创 2022-02-12 23:11:49 · 191 阅读 · 0 评论 -
树状数组 && P3374
本题就用树状数组来做了,不用线段树。什么是树状数组?树状数组是一个查询和修改复杂度都为O(logn)的数据结构。主要用于数组的单点修改和区间求和(个人感觉树状数组写起来可能比线段树简单一点,其实也差不多,但是凡是用树状数组可以解决的问题,就一定可以用线段树解决)树状数组每个结点的信息要覆盖自身编号和所有子节点包含的信息lowbit函数来求解x最低位的1int lowbit(int k){ return k & (-k);}(csdn上找的图片)我们...原创 2022-02-12 18:48:37 · 228 阅读 · 0 评论 -
P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles
很简单的一道dp首先看一下数据范围,1e3可以开个二维的然后思考状态转移方程,设位置i,j,一般情况下,[i][j]由位置[i-1][j-1]和[i-1][j]转移过来的,然后在考虑边缘位置,就可以了#include<bits/stdc++.h>using namespace std;const int maxn = 1005;int a[maxn][maxn], dp[maxn][maxn];int main(){ int n; cin >>原创 2022-02-12 15:48:53 · 164 阅读 · 0 评论 -
树链剖分入门学习
dfs序:A B D G H I C E J F用处?就是把树强行搞成了“连续的”我们可以发现两个重要的性质:一个结点的子树上的结点的时间戳,一定大于这个结点的时间戳且连续某些链上的时间戳也是连续的那么对于操作3,4,就可以套一个线段树实现了把树看成数组,时间戳是下标,结点的值为当前下标的值a[1] = 'A', a[2] = 'B', a[7] = 'C'操作3:将以x为根结点的子树内所有结点值都加上z操作4:求以x为根节点的子树内所有结点值值和...原创 2022-02-11 21:05:07 · 204 阅读 · 0 评论