随笔分类 - 贪心
摘要:传送门 首先可以想到二分答案,然后考虑判断 注意到所有点的外包矩形的四条边一定要被覆盖到,而正方形只有 $3$ 个,所以一定有一个正方形在角落 考虑爆搜,枚举正方形在当前外包矩形的那个角,然后对剩下的点的外包矩形继续这样搞
阅读全文
摘要:传送门 推推式子,对于原数列 $a[i],a[j]$ 如果要保留它们,那么它们之间的数就要改成单调上升 显然能改成单调上升的条件是 $a[i]<a[j]$ 并且 $a[j]-a[i]>=j-i$ ,也就是 $a[j]-j>=a[i]-i$ 所以设 $b[i]=a[i]-i$,那么对于第一问就只要求
阅读全文
摘要:传送门 注意题目要求的字典序最小是指下标最小 容易想到 $dp$,但是发现正着做不好搞,考虑反过来搞 原本正着做是求最长上升子序列,反过来就变成求最长下降子序列 然后我们就可以求出以每个位置为起点的上升子序列的最大长度 然后直接贪心从前往后枚举即可,复杂度 $O(nm)$ 维护最长下降子序列我是用树
阅读全文
摘要:传送门 第一个问题直接二分答案 然后第二个问题直接在二分出的答案下跑一遍 $dp$,设 $f[i][j]$ 表示当前已经切了 $i$ 次考虑完前 $j$ 个位置并且强制切 $j,j+1$ 时的方案数 那么有转移 $f[i][j]=\sum_{k=L}^{j-1}f[i-1][k]$,发现随着 $j$
阅读全文
摘要:传送门 我是弟弟 把操作离线,然后维护带权并查集,从小边到大边一个个合并,每次合并的时候计算贡献 显然方案数为左边块大小乘右边块大小 我好菜啊
阅读全文
摘要:传送门 我是弟弟 首先 $n=1$ 时一定有解,然后不要天真的以为每三个一循环 如果没有 $aa,bb,cc$ 这样的话,$n>1$ 时也可以当成 $n=1$ 来解,像 $n=1$ 一样,变成每 $n$ 个输出一种字符即可 如果有 $aa,bb,cc$ 这样的话就更一定有解了 枚举排列的时候直接 $
阅读全文
摘要:传送门 看题目就想到 $dp$,想不出来就去想贪心... 考虑按右端点排序,一个个修,如果在修某个建筑 $i$ 时发现来不及了,说明前 $i$ 个建筑最多只能修 $i-1$ 个 那么我们把前 $i$ 个中耗时最长的那个放弃,这样省下的时间最多 然后用优先队列维护一下就行
阅读全文
摘要:传送门 怎么好像没什么人写 $dp$ ...? 设 $f[i][j][k][0/1]$ 表示当前处理完前 $1$ 到 $i$ 的数,上一位开始的顺子有 $j$ 个,当前位开始的顺子有 $k$ 个,是否已经有雀头,的情况下能不能胡 因为连续三个顺子其实等价于三个刻字,所以我们只要考虑顺子小于 $3$
阅读全文
摘要:传送门 一眼 Burnside $dp$ 首先置换内部有独立的循环,置换的循环节长度为那些独立循环的 $lcm$ 考虑某个循环节长度 $L$ 怎么得到,显然把 $L$ 质因数分解,$\prod_{i=1}^{m}p_i^{k_i}$ 那么最优情况下独立循环的循环节为 $p_i^{k_i}$,好像挺显
阅读全文
摘要:传送门 看一眼感觉不太可做,推推性质 发现因为回文串去掉左右还是回文的,所以为了构成回文添加一个字符其实等价于删除另一边对应的字符 那么删除字符的代价就直接和添加字符的代价取最小值 然后考虑 $dp$,设 $f[l][r]$ 表示当前 $[l,r]$ 的区间内删除若干字符后成为回文串的最小代价,因为
阅读全文
摘要:传送门 直接枚举显然是不行的,考虑减少枚举 显然第一头牛一定要被打到,所以合法位置一定在第一头牛的八个方向 因为牛多位置少,所以枚举能打到第一头牛的所有位置,在枚举那个位置能打到的牛的数量,如果全都可以打到就记入答案
阅读全文
摘要:传送门 一眼贪心,先把每头牛的忍受范围变成区间 对于每个防晒霜,肯定优先给,能给的,区间右端点最小的 因为右端点大的之后还有更多机会,然后搞一个 $set$ 什么的乱维护一下就行 改了半天原来是要开 $multiset$ 啊
阅读全文
摘要:传送门 显然 $dp$,首先设 $f[i][j]$ 表示当前考虑到第 $i$ 个电线杆,高度为 $j$ 时的最小代价 那么有转移 $f[i][j]=f[i-1][k]+cost+C(j-k)$,其中 $j>=k$,$cost$ 为把电线杆 $i$ 增高到 $j$ 的代价,$i,j$ 固定时为常数 对
阅读全文
摘要:传送门 把状态看成 $01$,把序列状态差分,那么每次一个区间翻转即为差分序列两边翻转,最终状态就是差分值全为 $0$ 对于每个差分值不为 $0$ 的位置,我们一定要把它翻转,而差分值为 $0$ 的位置一定不能翻转,从左到右扫一遍贪心翻转就行 枚举所有 $K$ 即可
阅读全文
摘要:传送门 A. XORinacci 手玩三四项发现序列就是 $a,b,a\ xor\ b,a,b,...$,直接输出即可 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath>
阅读全文
摘要:传送门 看一眼感觉 $dp$,发现状态没法维护 考虑贪心,然后就想了两个错的贪心... 正解好神啊 首先如果权值最大的点能够一步染色那么肯定要染它 意思就是,一旦父节点被染色那么它就要接着被染色 那么把它们父子两合并成一个新的点,其他节点根据原来的边也连上来 考虑新的点的权值要怎么搞,现在既然这个节
阅读全文
摘要:传送门 考虑 $dp$ ,发现之前的 $-1$ 可能会产生贡献不好处理 贪心一下发现每个位置填的数必须单调不减,所以就不用考虑之前填的数 设 $f[i][j]$ 表示当前考虑到第 $i$ 个位置,填的数为 $j$ 时的最小代价 那么有 $f[i][j]=f[pre][k]+val[i][j],k<=
阅读全文
摘要:传送门 考虑一个非根非叶子节点如何无限大,显然只要任意两个儿子权值不同即可 考虑到根节点不会变,所以只要对根节点每一个儿子子树分别处理,如果子树内任意一个节点有两个权值不同的儿子直接输出 $+inf$ 考虑剩下的情况,子树如果是一颗普通树结构的话,那么每个节点都必须满足 $val[fa]+val[s
阅读全文
摘要:A. There Are Two Types Of Burgers 题意: 给一些面包,鸡肉,牛肉,你可以做成鸡肉汉堡或者牛肉汉堡并卖掉 一个鸡肉汉堡需要两个面包和一个鸡肉,牛肉汉堡需要两个面包和一个牛肉 求能得到的最多的钱 直接贪心,哪个比较贵就选哪个做,剩下的材料再做另一个 #include<i
阅读全文
摘要:传送门 纪念第一个自己写出的黑题... 看一眼就是分数规划,二分答案先套上,二分一个 $mid$ ,把所有边权减 $mid$ 然后就变成求树上边数在 $[L,R]$ 范围内的最长链 看到树,看到求链,再看看时间限制,点分治是没得跑了... 关键是考虑具体怎么点分治 每到一个分治节点 $x$ 就考虑所
阅读全文