![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
51Nod题解
文章平均质量分 60
ZigZagK
一个蒟蒻。
展开
-
【贪心】51Nod1241[特殊的排序]题解
题目概述有一个 nn 的排列,一次操作可以将一个位置上的数放到头或尾,求最少操作使得排列有序。解题报告贪心的策略是尽量少改变相对位置,所以我们刷一下”最长升“,这里的最长升指的是形如 i,i+1,i+2,⋯,ji,i+1,i+2,\cdots,j 的最长子序列。假设最长升为 MAXMAX ,那么 n−MAXn-MAX 就是答案。严格证明?不会啊:P。ps:题目里没说升序还是降序,我都写了,但好像只写原创 2017-08-27 20:22:50 · 410 阅读 · 0 评论 -
【杜教筛】51Nod1239[欧拉函数之和]题解
题目概述求 ∑ni=1φ(i)\sum_{i=1}^{n}\varphi(i) 。解题报告因为 n=∑ni=1∑nj=1[gcd(i,n)=j]=∑d|n∑ndi=1[gcd(i.nd)=1]=∑d|iφ(nd)n=\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd(i,n)=j]=\sum_{d|n}\sum_{i=1}^{n\over d} [gcd(i.{n\over d})=1原创 2017-12-26 15:14:42 · 429 阅读 · 0 评论 -
【杜教筛】51Nod1244[莫比乌斯函数之和]题解
题目概述求 ∑ni=1μ(i)\sum_{i=1}^n \mu(i) 。解题报告杜教筛可以用来求积性函数的前缀和,具体想法是用另外一个函数卷待求函数,如下: ∑i=1n(f∗g)(i)=∑i=1n∑d|if(id)g(d)=∑d=1ng(d)∑i=1⌊nd⌋f(i)=∑i=1ng(i)S(⌊ni⌋)⇔g(1)S(n)=∑i=1n(f∗g)(i)−∑i=2ng(i)S(⌊ni⌋)⇔S(n)=∑ni=原创 2017-12-25 11:42:03 · 844 阅读 · 0 评论 -
【欧拉函数】51Nod1040[最大公约数之和]题解
题目概述求 [1,n][1,n] 与 nn 的 gcdgcd 和。解题报告对于 nn 的因子 xx ,只有 gcd(n,i)=xgcd(n,i)=x 的 ii 有 xx 的贡献,也就是 gcd(nx,ix)=1gcd(\frac{n}{x},\frac{i}{x})=1 的 ii 。然后贡献其实就是 x×ϕ(n/x)x\times \phi(n/x) 。示例程序#include<cstdio>#i原创 2017-10-16 19:05:54 · 373 阅读 · 0 评论 -
【KMP-fail树】51Nod1277[字符串中的最大值]题解
题目概述给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。解题报告KMP的 failfail 树是 failfail 指针构造起来的一棵树(同理AC自动机也有 failfail 树)。那么会发现一些性质:节点 xx 代表的前缀的出现次数 == 子树 xx 的节点个数。考虑KMP的定义,很容易证明。示例程序#include<cstdio>#include<cstring>#inc原创 2017-10-21 10:24:01 · 338 阅读 · 0 评论 -
【状压DP+矩阵乘法】51Nod1311[转换机]题解
题目概述给你两个等长的字符串S与T,且S与T都只包含有”a”, “b”, “c”这三个字符。 你需要花一些钱来实现一些操作,让字符串S能最终变成字符串T,操作只有以下三种:1)将字符串S中的一个‘a’字符变成‘b’,并消耗cost0的花费;2)将字符串S中的一个‘b’字符变成‘c’,并消耗cost1的花费;3)将字符串S中的一个‘c’字符变成‘a’,并消耗cost2的花费;你一共有金钱Money,问原创 2017-10-21 07:57:54 · 291 阅读 · 0 评论 -
【DP】51Nod1354[选数字]题解
题目概述给出 nn 个数和 KK ,选出 nn 个数中若干个数使得乘积恰好为 KK ,求方案数。解题报告我太菜了,都是JZdalao教我题目的……刚开始我想拆分素因子然后背包……发现直接爆炸。实际上我们预处理出 KK 的因子,然后定义 f[i][j]f[i][j] 表示前 ii 个数组成 KK 的第 jj 个因子的方案数(将因子由小到大排序)就可以了。至于确定因子标号,我用了二分原创 2017-10-28 21:19:15 · 270 阅读 · 0 评论 -
【贪心+ST算法+单调栈】51Nod1288[汽油补给]题解
题目概述有 n+1n+1 个城市, 00 是起点 nn 是终点,开车从 0→1→2⋯→n0\to 1\to 2\cdots\to n ,车每走 11 个单位距离消耗 11 个单位的汽油,油箱的容量是 TT 。给出每个城市到下一个城市的距离 DD ,以及当地的油价 PP ,求走完整个旅途最少的花费。如果无法从起点到达终点输出 −1-1 。解题报告以前做过的贪心题……贪心想法不难,主要是要考虑完整。从原创 2017-10-20 16:30:32 · 617 阅读 · 0 评论 -
【阈值优化+背包】51Nod1597[有限背包计数问题]题解
题目概述有一个容量为 nn 的背包,还有 nn 个物品,第 ii 个物品体积为 ii 且有 ii 个。解题报告双倍经验题LOJ6089。可怕的阈值优化……令 S=⌊n√⌋S=\lfloor \sqrt n\rfloor :当物品均 ≤S\le S 的时候是系数背包, f[i][j]=∑f[i−1][j−ki]f[i][j]=\sum f[i-1][j-ki] ,用前缀和优化,记录 sum[i]=∑原创 2017-10-06 17:07:04 · 570 阅读 · 2 评论 -
【置换群+贪心】51Nod1125[交换机器的最小代价]题解
题目概述有 nn 台重量不相同的机器,每次操作可以交换两台机器,代价是两个机器的重量之和,求使机器按照重量升序排列的最小代价。 解题报告对于一个位置 ii ,记录 ID[i]ID[i] 表示排序完毕后在位置 ii 上的数(也就是第 ii 小的数)原来在哪里,那么我们需要做的就是将位置 ii 上的数与位置 ID[i]ID[i] 上的数进行交换,使得最终在位置 ii 的数归位。我们会发现按照 i→ID[原创 2017-08-29 20:45:39 · 452 阅读 · 0 评论 -
【贪心】51Nod1615[跳跃的杰克]题解
题目概述你刚开始在 00 ,第 ii 步可以向左或向右跳 ii ,求最少跳几步刚好跳到 xx 。解题报告刚开始的想法是先跳到最接近 xx ,然后一步一步迂回跳(一下往左一下往右)到 xx 。这显然是错的……我们看 88 :1+2+3+4=101+2+3+4=10−1+2+3+4=8-1+2+3+4=8所以我们可以通过改变前面某一步的方向使得跳过头的方案跳回 xx 。假设跳过头到了 XX ,那么只有当原创 2017-10-17 17:48:46 · 971 阅读 · 0 评论 -
【贪心+数学分析】51Nod1350[斐波那契表示]题解
题目概述每个数都可以用若干个斐波那契数组成,记录 F(x)=xF(x)=x 最少由多少个斐波那契数组成,求 G(n)=∑ni=1F(i)G(n)=\sum_{i=1}^{n}F(i) 。解题报告有个贪心: F(x)=F(x−fibmax)+1F(x)=F(x-fib_{max})+1 ,其中 fibmaxfib_{max} 是 ≤x\le x 的最大斐波那契数(并不会严格证明QAQ)。那么也就是说原创 2017-09-20 20:31:40 · 420 阅读 · 0 评论 -
【贪心+堆+链表】51Nod1053[最大M子段和 V2]题解
题目概述在 {An}\{A_n\} 中选至多 mm 个不相交的子段,求子段和的最大值。解题报告初始想法是DP,好像可以优化到 O(n2)O(n^2) ,但是对于 5000050000 的数据范围还是不行。把 00 无视掉,我们就可以把 {An}\{A_n\} 分为一系列正子段和负子段(正负交替),选走所有正段肯定是最优秀的,但是正段个数可能大于 mm ,所以我们要想办法使块数减少(定义 V(i)V(原创 2017-09-02 19:01:05 · 1109 阅读 · 0 评论 -
【and or分块】51Nod1674[区间的价值 V2]题解
题目概述给出一个序列 {An}\{A_n\} ,求 ∑ni=1∑nj=iand(ai,ai+1,⋯,aj)∗or(ai,aI+1,⋯,aj)\sum_{i=1}^{n}\sum_{j=i}^{n} and(a_i,a_{i+1},\cdots,a_j)*or(a_i,a_{I+1},\cdots,a_j) 。解题报告要了解裸题的做法,这道题是and or分块的裸题,对于任意一个点 ii ,有下面的结原创 2017-09-19 19:48:57 · 457 阅读 · 0 评论 -
【单调栈 or 分治】51Nod1215[数组的宽度]题解
题目概述给出一个序列 {An}\{A_n\} ,求 ∑ni=1∑nj=imax{ai,ai+1,⋯,aj}−min{ai,ai+1,⋯,aj}\sum_{i=1}^{n}\sum_{j=i}^{n}max\{a_i,a_{i+1},\cdots,a_j\}-min\{a_i,a_{i+1},\cdots,a_j\} 。解题报告水博客again,这道题显然是一道单调栈的题目(用单调栈处理出每个元素作为原创 2017-09-18 21:47:20 · 475 阅读 · 0 评论 -
【反序表+DP】51Nod1020[逆序排列]题解
题目概述求 nn 的排列中逆序对数为 KK 的方案数。解题报告好像在水博客?如果知道反序表这种东西这就是道很简单的DP了。定义 f[i][j]f[i][j] 表示反序表前 ii 个的和为 KK 的方案数,那么 f[i][j]=∑min(j,i−1)k=0f[i−1][j−k]f[i][j]=\sum_{k=0}^{min(j,i-1)}f[i-1][j-k] ,记录一下前缀和就能够优化到 O(nK)原创 2017-09-09 14:03:02 · 373 阅读 · 0 评论 -
【FWT】51Nod1773[A国的贸易]题解
题目概述有 2n" role="presentation" style="position: relative;">2n2n2^n 个点,每次 i" role="presentation" style="position: relative;">iii 点会使 count(i xor j)=1" role="presentation" style="position: re原创 2018-01-24 10:38:15 · 492 阅读 · 0 评论