自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

swqeaaa的博客

摇摆起来

  • 博客(30)
  • 收藏
  • 关注

原创 HDU 6582 Path BZOJ 1266 上学路线route 网络流 最短路

给出一个图, 问从起点到终点, 问去掉一些边使得最短路增大, 求最少的花费是多少(6582是边长, 1266是给定的).另外, 6582是有向边, 1266是无向边.这个题可以分解成两部分:Ⅰ求出最短路所有路径上的边Ⅱ在Ⅰ上新建一个图, 跑网络流最小割.最小割: 就是把起点和汇点割开的最小花费.这样, 就是花费最少的代价, 把所有的最短路径割断, 进而增大了最短路.Ⅰ就...

2019-07-25 23:37:04 147

原创 一些瞎搞的题

字符串求方案数CF1084 CThe Fair Nut and String 字符串求满足要求的子序列个数求一个都是a的子序列, 且在原串里,每两个a中间有一个b, 问有多少个这样的子序列.首先. a和b之外的字符是没有意义的. 相连的b也是没有意义的, 相当于只有一个. 只需要用b把a分割成多个子段,每个子段取1个a/不取, 所以答案就是(连乘)(每个段长+1)-1....

2019-07-24 00:00:40 132

原创 牛客 2019 多校 1 C E I dp 线段树 思维

C Euclidean Distance题意: 给出高维空间的一个点A, 求另一个点P满足坐标非负且坐标和为1, 使得P到A的距离最小.真正的思路:https://www.cnblogs.com/dillonh/p/11215846.html虚假的思路: 本以为可以用拉格朗日乘子法做, 最后发现没有考虑坐标非负的条件, 不是只有等值约束,还有n个不等式约束, 所以L函数会多n个系数不...

2019-07-24 00:00:30 116

原创 CF 1096 D Easy Problem dp

给出一个字符串, 现在可以删除一些字符, 要求不能出现"hard"这个子序列, 而每个位置的字符都有代价, 问最小代价是多少.dp表示前面最坏出现了"hard"的多长的前缀:dp[0]表示前面花费了dp[0]的代价, 使得从开头到当前位置不存在hard的任何前缀.dp[1]表示前面花费了dp[1]的代价, 使得从开头到当前位置存在"h"的任何前缀.dp[2]表示前面花费了dp[2]...

2019-07-23 22:55:41 158

原创 CF 1084 D The Fair Nut and Strings 树形dp

给出一棵无根的树, 每个节点上有价值, 边上有花费, 每到一个点能得到这个点的价值, 每到一条边会减掉这个边的价值, 只有当前拿到的价值>花费才能走这条边, 在随意选择起点和终点的情况下, 问最多能得到多少价值.思路: 这个题与那个Computer的树形dp很像, 无非是多了几个限定条件, 点有了价值, 边有了花费, 还是求最大价值.Ⅰ首先将这个无根树固定一个根, 每个点就有了固定的...

2019-07-23 10:16:24 181

原创 HDU 4283 You Are the One 区间dp

题意: 有一列人, 他们每个人有屌丝值, 每个人根据上场顺序会有不满意度, 是在他之前上场人数乘屌丝值. 现在有一个栈可以暂时人, 问最后所有人都上场最少会产生多少不满意度.思路:dp[i][j]表示从第i到第j个人最少产生的不满意度.现在假设i到j已经是最优区间, 考虑i前面的人i-1:这个人可能Ⅰ直接上场, 或者Ⅱ进栈之后在j之后上场.那么dp[i-1][j]就会由两个值进...

2019-07-19 17:52:53 104

原创 HDU 1251 入门字典树

题意: 给出一些单词, 再询问一些单词是之前那些单词的多少个的前缀.字典树:x表示整个字典树的第几个节点, c表示这个字符串第x个节点处是c字符. trie表示下一个字符是几号节点.每个节点只能由一个节点的某个字符得到, 每个节点的每个字符都有可能连接到一个节点, 所以这是一个树.当这个树满时, 空间是26^len.对于这个题, 每个节点储存走到过这个节点的上一节点的字符串个...

2019-07-17 17:34:18 104

原创 HDU 3336 Count the string kmp 递推dp

题意: 每个前缀出现次数的和.思路: cnt[pos]记录第pos个前缀x在比他长的前缀y中出现的次数,递推式:定义原串的前缀为x类串.每个长度为a的x类串s会包含2个长度为nxt[a]的x类串t, 而两个相邻的s会有一个重复的t, 所以cnt[a]个s会有cnt[a]+1个t.最后答案加上每个前缀本身共m. 具体见代码.#include <iostream>...

2019-07-17 11:28:06 142

原创 KMP的一些总结

小结论:nxt[x]表示前0~x-1位存在的最长前缀=后缀的长度.一个字符串长度为m, 那么最小循环节长度为m-nxt[m]s串任意前缀的nxt数组就是s串的nxt数组, 直接用就行了kmp的小技巧:① 如果只看s中有没有t,kmp()循环加上当j==m时break的条件.② 如果求出现次数, 要去掉①中的条件, 并每当j==m(匹配成功)时, 把j赋为nxt[j]③ ...

2019-07-17 11:25:20 141

原创 有关GCD 质数 互质 的一些小结论

1: n以下三个数LCM的最大值:2: 若干个数的GCD!=1, 那么这些数会有一个公共质因子3: CF 1033 DDivisors把一个数分成若干个质数的幂次的乘积, 例如: ,那么, 这个数的因子的个数为(①).反过来也是同样:假设一个数的因子个数为4, 它会是几个质数的乘积呢?由公式①, 显然它最多有2个质因子.假设第一个质数a1的幂次为x, 第二个...

2019-07-16 23:56:22 486

原创 CF 757 B Bash's Big Day gcd 质因子分解

题意: 给出一个数组, 问最多能取出多少个数使得其gcd不为1.思路:若干个数的gcd!=1等价于这些数有一个公共质因子.这样, 问题就变为: 一个质数被数组中多少个数用到, 找到被用到最多的那个质数, 输出它被用了多少次.只要对数组中的每个数分解质数因子, 统计每个质数被用了的次数即可.质数分解: int x = a[i]; int pos = 0; ...

2019-07-16 23:09:04 159

原创 HDU 3530 Subsequence 尺取 RMQ

题意: 给出一个数组, 长度为1e5, 1次询问, 给出一个上界R, 一个下界L, 问最大值减最小值差∈[L, R]的区间最长是多少.思路: RMQ当然可以维护M-m, 但是因为对M-m有两个限制, 没有单调性就不能二分解决..只能用我不太熟悉的尺取了.尺取的具体思路见代码: // a~b如果M-m>上界, a~c只会增大M, 减小m // 增大M...

2019-07-16 22:51:46 140

原创 CF 1047 C Enlarge GCD gcd

题意: 给出N(<=3e5)个数, 每个数不超过M(<=1.5e7), 问最少去掉多少个能让这个数组的gcd变大, 不可能的话输出-1.思路:①: 题意等价于, 这个数列全都除以一开始的gcd, 得到B集合, 求B的最大子集C, 使得C的gcd不为1.②: 而①又等价于: C集合中, 存在一个"公共质因子"X, 即C中每个数%X=0且X为质数.③: 由②, 我们只需要统...

2019-07-15 11:53:49 210

原创 HDU 4123 Bob’s Race 树dp RMQ 尺取

题意: 每个点有编号, 点组成一棵树, 每个点求出树上的最远距离, 给出若干次询问, 问一个连续编号的区间, 满足最大值和最小值的差距<Q时, 区间的最大长度是多少.思路: 树dp 与HDU 2196 Computer 相同的方法求出每个点的最长距离, 然后就与树无关了. 对于每一次询问, 尺取+RMQ得到满足条件的最长距离.代码:#include <iostream&g...

2019-07-13 22:30:59 111

原创 HDU 2196 Computer 树dp 每个点树上最远距离

题意: 一些电脑连成一棵树, 问这个树上每个节点的最远距离是多少.思路:从根dfs到叶子, 开数组维护每个点到自己子树的叶子的最远和次远距离, 对于这两个距离还要记录是从哪个儿子节点来的.再做一遍dfs, 每个节点用它父亲的最远/次远距离+到自己的距离更新自己的最远/次远距离(前提用来更新的父亲距离不是自己提供的).代码:#include<bits/stdc++.h&g...

2019-07-13 21:53:01 219

原创 洛谷P4163 排列 数位dp / 全排列

题意: 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0)。思路:next_permutation直接秒, 然而我用了数位dp...因为s最多只有10位, d只有1000, 所以dp用[10]记录pos到第几位, [2]*10记录某一位有没有用到, [1000]记录当前%d余数.因为记录某位置有没有用过, 这样做之后会有重复, 类似000会被记为6种. ...

2019-07-13 19:25:16 278

原创 HDU 5115 Dire Wolf 区间dp

题意: 有一排狼, 每只狼都有a和b, 一只狼的real战斗力=a+相邻狼的b,现在开始杀狼, 每杀一只就会承受它的real伤害, 问把狼全杀了要掉多少血.思路:dp[i][j]表示杀死i到j之间的狼最少的花费.当前状态dp[i][j]有3个状态转移:①dp[i+1][j]+a[i]+b[i-1]+b[j+1]②dp[i][j-1]+a[j]+b[i-1]+b[j+1]③d...

2019-07-13 17:27:09 94

原创 POJ 3368 Frequent values RMQ

题意: 给出一个有序序列(1e5), 共1e5次查询, 每次查询给定区间内出现最多的数的出现次数.思路:一开始没有想到怎么用RMQ做. 因为RMQ处理的是区间最值, 而本题是区间的众数.发现这个题由两个特殊之处: ①数列有序, ②答案只要求"多少次", 而不管"是什么",那么, 我们就可以将不同的数分为不同的类, 每个类(sum数组)记录这类数出现了多少次, 另外a数组记录每个数是...

2019-07-13 17:02:47 150

原创 POJ 1050 To the Max 最大子矩阵 HDU1003 最大子段和 dp

题意: 给出一个矩阵, 求子矩阵中元素的和的最大值.思路:考虑一维的情况:一个数列, 求其子段的和的最大值(HDU1003). 这是一个很显然的dp问题.如果0~i-1的子段和>0, 0~i的子段和就是0~i-1的子段和+a[i] (继承之前的)不然0~i的子段和就是a[i] (从i开始)dp[i]=max(dp[i-1]+s[i],s[i])ans=max(d...

2019-07-13 16:16:56 112

原创 CF 1114D Flood Fill 区间dp

TP给出一个方格序列, 每个方格有颜色, 现在可以从某个格子开始将周围同色的连通区域变换成另一个颜色, 问最少操作多少次能让序列同色.可以得到一个规律: 一个区间最后总是会变成头部的颜色或者尾部的颜色. 那么我们dp数组可以记录区间内变成头/尾最少的操作次数.dp[s][t][x]代表s到t区间,颜色为最左/右的最少操作次数.递推式:代码:#include&lt...

2019-07-11 21:13:20 185

原创 HDU 3236 Gift Hunting 01背包(*3) 有物品必须取

题意: 有两张购物卡, 面额为v1, v2, 有一次一键购买机会(不花钱), 物品有价值和花费, 一些物品是必须取的, 问获得的最大价值是多少.思路:①买的物品分到两张购物卡和一次一键购买上, 相当于3个01背包.②在更新dp数组时, 如果当前物品是必须取的, Ⅰ它不能由自己转移(不能不取当前物品), Ⅱ如果不能由其他状态转移, 那么这个状态就是不可达的.代码:#includ...

2019-07-11 19:13:02 119

原创 HDU 5188 zhx and contest 贪心 01背包

题意: 共30个题, 每个题有花费的时间(1e5), 价值(1e9), 最早可提交时间(1e5), 问最早在什么时间做题总价值达到W(1e9).思路:选择先做哪个题会影响到下一个题的开始时间.先做允许提交时间最早的题不是最优的.应当先尝试做 最早提交时间 最早的 题.先按上面的要求对题目排序, 再01背包.背包时注意当前时间要晚于允许提交时间.参考:https://bl...

2019-07-11 14:19:16 115

原创 HDU 3449 Consumer 有依赖背包 分组背包 (算法有问题)

题意: 有50个盒子, 每个盒子里有10个物品, 物品有价值和花费, 盒子只有花费, 只有买了盒子才能买其中的物品, 问总共花P块钱(P<100000)最多能得到多少价值.思路:①一开始不记得有依赖背包, 想起之前写的挖矿的题, 以为可以直接写分组背包, 以下是错误的思路:对于每个盒子, dfs遍历这个盒子内所有的取法, 然后每个盒子是一个分组, 跑分组背包.复杂度: dfs...

2019-07-11 10:53:14 149

原创 POJ 2342 Anniversary party 入门树dp

类似: POJ 1463 Strategic game题意: 给出一颗树, 每个节点有价值, 现从中取出若干个点, 但是相邻的点不能都取, 求最大的总价值.思路:树dp①dp[0][x]代表x这个点不取时, 以x为根节点的子树能获得的总价值.②dp[1][x]代表x这个点取时, 以x为根节点的子树能获得的总价值.①: 此时, x的儿子节点可以取, 也可以不取(当然是选择大的...

2019-07-10 22:02:15 76

原创 HDU 2476 String painter 区间dp

题意: 给出两个字符串, 定义操作为将a串任意连续区间改为相同的一个字符, 问最少多少次操作可以让a变为b.思路:直接做太难了. 看了kuangbin的博客才知道可以这样做.先用区间dp搞定从空白串变为b串所需要的操作次数.至于a串变b串,要用到ans数组记录前j位的最小操作数.a[i]若与b[i]相同, 那么ans[i]就可以用ans[i-1]更新.求让前i位变身的最小...

2019-07-10 18:56:30 121

原创 CodeForces 1185 G1 Playlist for Polycarp dp dfs

题意: 给出n个球, 每个球有颜色和质量, 要取出若干个球总价值为T, 且相邻的球颜色不同, 问有多少种取法. 每个球有编号(即取"红1红2"≠取"红2红1").n<=15, 颜色=3种, T<=225, 每个球的价值<=15.其实只要解决:Ⅰ "一堆球有三种颜色, 有多少种排列方式使得相邻的球颜色不同"Ⅱ dfs枚举所有取法, 得到和为T的(合法)的取法.Ⅰ...

2019-07-10 14:52:54 156

原创 LightOJ 1422 Halloween Costumes 区间dp

题意: 一个人要去参加n个晚会, 一个长度为n的序列给出每个晚会要穿的衣服类型, 这个人可以套着穿无数件, 但是只要脱下来就必须换新衣服. 问最少这个人要消耗多少件衣服.思路:区间dp维护区间内, 这个人最少消耗多少件衣服.长度为1的区间一定是1.①长度为x的区间, 先赋为x, 代表最差情况下, 每到一个晚会就换一件新的衣服.②当这个区间的头尾相同时, 可以只消耗长度为x-1的...

2019-07-10 10:35:12 110

原创 POJ 1651 Multiplication Puzzle 区间dp

题意: 给出一个数组, 每取走其中一个元素, 就要付出 它左边*它自己*它右边 的代价, 问要当取走除两头外所有的元素, 付出的最小代价是多少.思路:只需要dp[i][j]维护区间内都取完, 两头(i处和j处)还没取的最小代价即可.在这样的情况下, 区间的最小长度当然是3.然后当前区间枚举最后一个取走的元素, ①这个元素取走的代价+②③它左右两个区间早已取走的代价=当前区间的总代价...

2019-07-10 00:58:29 118

原创 C++批量文件重命名

#include <iostream>#include <io.h>#include <string>#include <cstring>#include<vector>using namespace std;int cnt=1;string xx="photo";string yy=".jpg";void...

2019-07-10 00:12:14 872 1

原创 POJ 2955 Brackets 区间dp

题意: 给出一个由 '(', ')', '[', ']' 组成的序列, 求最长的合法括号序列的长度.思路:一开始我的想法是dp[i][j]维护i到j之间合法序列的长度. 然后单开数组维护这个区间头上多出的(和[,以及尾上的)和],但是这样是不对的. 因为同样是i到j的区间, 可能会有不同个数的多余括号. 这样就产生了状态重叠(多个状态用了同一个位置表示). 这样, 就只能开4维空间, 但...

2019-07-10 00:08:39 130

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除