自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ProLights的博客

Someday, you can program the lights.

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

原创 HihoCoder - 1044 状态压缩·一 状态压缩dp

题意:给出一个序列,选出一部分值,连续的m个数里最短选取q个,求选出的值的和的最大值。 状态压缩dp dpij表示当前考虑第i个数,且以i结尾的连续m个数的情况储存在j里,j用二进制表示以后比如m=5, 10100表示序列选了i-4, i-2,没有选i-3, i-1, i. 状态转移的时候,先判断j里有几个1,如果cnt <= q,则为合法状态, t = j >> 1表示当前状态j表示的 前 m-1个数的情况(不包括第i个数) 如果 i < m则直接, dp[i][j] = dp[i-1][t] + (j

2017-04-29 00:49:39 1039

原创 HihoCoder - 1043 完全背包 基础dp、背包dp

题意:dp基础题,给出n种背包每种有无限个,每个花费为needi 价值为 valuei,总花费m,求最大价值和。 基础dp、背包dp dpj表示,总花费为j时的最大价值和, dpj = dp[j- needi] + valuei; 这里直接对于每个背包i,直接从0~m进行递推,dp[j- needi] 可以是上一个背包递推过来的,也可以是当前背包递推过来的。 复杂度 O(n^2)

2017-04-29 00:31:26 933

原创 HihoCoder - 1038 01背包 基础dp、背包dp

基础dp、背包dp dpij表示当前考虑第i个背包,花费为j时的最大收获。 由于状态转移只考虑当前状态和上一层状态,所以只能可以转化成一维,然后dp的是 j 从大到小的顺序进行递推,这样 dp[ j-need[i] ]必定必定是上一次的,而不是这一次的。 复杂度 O(n^2)

2017-04-29 00:24:23 859

原创 HihoCoder - 1037 数字三角形 基础dp、朴素dp

题意:dp基础题,给出一个数字三角形,求一条从顶到底的路径,路径权值和的最大值。 基础dp、朴素dp 复习下dp基础知识, 动态规划的一个核心概念在于不去计算已经计算的东西,不去计算不需要的东西,即"取出冗余"。 且要满足,性质一:无后效性,即当前的抉择不会对后面的抉择产生影响; 性质二:重复子问题,即把当前问题分解为k个问题。 然后定义状态, 写出状态转移方程, 并从时间和空间的角度优化 状态和状态转移方程。 然后注意处理边界情况。 这题直接定义 dpij表示走到第

2017-04-29 00:12:19 771

原创 HihoCoder - 1511 树的方差 无根树的计数、分配式方差、分数取模

题意:给出一个n,表示n个节点的无根树,每个节点的权值是deg[i]即节点的度,求所有 节点个数为n的无根树的deg[i]方差 的和。 无根树的计数、平均方差、分数取模 首先要用到一个分配式方差公式(笔者自己命的名), 表示把n个东西分配成m分时的方差。 这里长度为n的无根树,则sigma{deg[i]} == 2*(n-1)。 然后点的度数必定大于0,所以 相当于把 2*(n-1) - n 个东西分配成 n 份的方差 的和。 这里节点数为n的完全图有 n^(n-2) 种无根树, 所以答案是 (n-1)

2017-04-28 18:50:30 1044 3

原创 HihoCoder - 1457 后缀自动机四·重复旋律7 后缀自动机+拓扑排序+递推、BFS

题意:所有字符串的不同子串的“和”(也就是把串看成数字,在十进制下的求和,允许有前导0)。 后缀自动机+拓扑排序+递推、BFS 首先如果只是一个字符串,则转移的时候,st[i] == v节点会转移到u节点,则 cnt[u] = sigma{cnt[v] * 10 + c * |substrings(v)| | trans[v][c] = u}, 其中cnt[v]表示以v结尾的不同子串的和, |substrings(v)| 即为以v结尾的不同子串的个数即从s到v的路径数。 然后推广到这里的n个串,可以用

2017-04-22 19:02:27 1320

原创 HihoCoder - 1449 后缀自动机三·重复旋律6 后缀自动机、递推、DFS

题意:求一个字符串中,所有长度为K的子串出现次数最多的子串的出现次数,但是K不是固定的,求所有的K的答案。 后缀自动机、递推、DFS 首先 ans[MAXN] 必定是单调不增序列, 一个子串出现的次数是它的endpos集合的大小,由于endpos[u]的集合为以u代表的子树的endpos集合的并集,可以跑一边dfs,预处理出所有的endpossz[i]。 所以只需要根据pre树求出,ans[maxlen(st)] = max(ans[maxlen[st], endpossz[st]),然后从len~0递推,

2017-04-22 18:43:32 1086

原创 HihoCoder - 1445 后缀自动机二·重复旋律5 后缀自动机

题意:统计字符串中不同子串的个数。 后缀自动机 这题是后缀自动机基础题,直接使用SAM上的pre树, sigma{val[np] - val[pre[np]]} 复杂度 O(n)

2017-04-22 18:30:30 1030

原创 HihoCoder - 1175 拓扑排序·二 拓扑排序、BFS

题意:初始有k个节点上有一个病毒,病毒会沿着有向边向向来的节点复制传染一次,图保持无环,最后图上病毒的分布必定会到达稳定状态,求达到稳定状态时,图上的病毒数量。 拓扑排序、BFS 因为保证无环,所以可以BFS, 每次选择入度为0的节点,把病毒数量传递下去。 复杂度 O(n+m)

2017-04-22 14:04:42 873

原创 HihoCoder - 1174 拓扑排序·一 拓扑排序、BFS

拓扑排序基础题,判断图中是否有环。 拓扑排序、BFS 每次把入度为0的点删除后入队,进行BFS,最后如果有剩余没有删除的点,则存在环,否则没有。 复杂度 O(n+m)

2017-04-22 13:52:09 1085

原创 Codeforces Round #409 (Div. 2) D. Volatile Kite 计算几何、凸多边形、线段类

题意:给出一个凸多边形,要求求出一个最大的dist,使得所有的点可以任意移动距离最大为第dist的路程,依然为凸多边形。 计算几何、凸多边形、线段类 对于凸多边形,每相邻的三个点可以构成一个三角形ABC,答案为B到AC的距离的一半, 可以以每个点为圆心话圆,这里借用一下官方Tutorial里的图片☺☺ 然后借助下常用的点类和线段类即可,以下用的是红书上的线段类 复杂度 O(n)

2017-04-17 23:32:41 1043

原创 Codeforces Round #409 (Div. 2) C. Voltage Keepsake 二分

题意:每个设备初始电量为bi,每秒消耗ai,然后充电器每秒可以给一个设备充电p,问所有设备同时工作的最长时长。 二分 很显然的要用二分来做,然后check函数该怎么写呢? 这里题目中说 You can switch which device is charging at any arbitrary unit of time (including real numbers) , 这就表示可以整体处理,也就是说,首先把设备按照只用初始电量的工作时间(real number)排序, 然后对于每个mid 进行che

2017-04-17 23:14:43 1021

原创 Codeforces Round #408 (Div. 2) D. Police Stations 最短路、BFS

题意:有一棵无根树,有一些节点上有一些标记(police station),初始时满足,每个节点至少 与一个被标记过的节点相连且距离不超过d,要求去掉尽可能多的节点,使剩余的图依然满足,每个节点至少 与一个被标记过的节点相连且距离不超过d。 最短路、BFS 本来用dfs写了一发,后来发现很多情况下会重复去掉边。 用BFS来做比较好,从所有的被标记过的节点开始BFS,当接下来的边会导向已经访问过的节点时把这条边减去,否则放入队列。 这样每个节点都会与一个被标记过的节点直接或间接的相连,且距离不超过d。 最终会

2017-04-13 19:38:48 752

原创 Codeforces Round #408 (Div. 2) C. Bank Hacking 无根树、贪心、枚举

题意:有一棵无根树,上面每个节点都有一个权值,可以任意选择一个节点删除,但这是和它相邻的节点即隔一个点间接相邻的点 的权值都会增加1,求把所有的点都依次删除,中途会遇到的最大权值点的 最小权值。 无根树、贪心、枚举 其实选定一个根时,根的权值是本身val[i],根的子节点的权值是val[i]+1,其它节点的权值是 val[i]+2, 这个时候只要枚举根和这个根的直接子节点,即可求出答案。 其中取出的这些节点放在priority_queue1里剩余的其它节点放在priority——queue2里,这样就可以快

2017-04-13 19:36:27 1101

原创 ZOJ - 3231 Apple Transportation 树形dp

题意:有一颗n节点的苹果树,每个节点上有一定数量的苹果ai,树上有一些松鼠,他们想让苹果平均分配,即每个节点的方差最小。它们可以任意地将苹果在节点之间移动, 每移动一个苹果所花费的代价是移动的路程。求最小的总代价。 树形dp 方差最小其实就是等价于 有 sigma{ai} mod n个节点上有 sigma{ai} / n + 1个苹果,其他都有 sigma{ai} / n 个。 f[i][j]表示在节点i代表的子树中有j个节点上有 sigma{ai} / n + 1个苹果,其他的为sigma{ai} / n

2017-04-08 20:45:29 871

空空如也

空空如也

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

TA关注的人

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