![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
HihoCoder OJ
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
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 · 1050 阅读 · 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 阅读 · 0 评论 -
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 · 1089 阅读 · 0 评论 -
HihoCoder - 1445 后缀自动机二·重复旋律5 后缀自动机
题意:统计字符串中不同子串的个数。后缀自动机这题是后缀自动机基础题,直接使用SAM上的pre树, sigma{val[np] - val[pre[np]]}复杂度 O(n)原创 2017-04-22 18:30:30 · 1031 阅读 · 0 评论 -
HihoCoder - 1175 拓扑排序·二 拓扑排序、BFS
题意:初始有k个节点上有一个病毒,病毒会沿着有向边向向来的节点复制传染一次,图保持无环,最后图上病毒的分布必定会到达稳定状态,求达到稳定状态时,图上的病毒数量。拓扑排序、BFS因为保证无环,所以可以BFS, 每次选择入度为0的节点,把病毒数量传递下去。复杂度 O(n+m)原创 2017-04-22 14:04:42 · 876 阅读 · 0 评论 -
HihoCoder - 1044 状态压缩·一 状态压缩dp
题意:给出一个序列,选出一部分值,连续的m个数里最短选取q个,求选出的值的和的最大值。状态压缩dpdpij表示当前考虑第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 · 1040 阅读 · 0 评论 -
HihoCoder - 1043 完全背包 基础dp、背包dp
题意:dp基础题,给出n种背包每种有无限个,每个花费为needi 价值为 valuei,总花费m,求最大价值和。基础dp、背包dpdpj表示,总花费为j时的最大价值和,dpj = dp[j- needi] + valuei;这里直接对于每个背包i,直接从0~m进行递推,dp[j- needi] 可以是上一个背包递推过来的,也可以是当前背包递推过来的。复杂度 O(n^2)原创 2017-04-29 00:31:26 · 938 阅读 · 0 评论 -
HihoCoder - 1038 01背包 基础dp、背包dp
基础dp、背包dpdpij表示当前考虑第i个背包,花费为j时的最大收获。由于状态转移只考虑当前状态和上一层状态,所以只能可以转化成一维,然后dp的是 j 从大到小的顺序进行递推,这样 dp[ j-need[i] ]必定必定是上一次的,而不是这一次的。复杂度 O(n^2)原创 2017-04-29 00:24:23 · 863 阅读 · 0 评论 -
HihoCoder - 1037 数字三角形 基础dp、朴素dp
题意:dp基础题,给出一个数字三角形,求一条从顶到底的路径,路径权值和的最大值。基础dp、朴素dp复习下dp基础知识,动态规划的一个核心概念在于不去计算已经计算的东西,不去计算不需要的东西,即"取出冗余"。且要满足,性质一:无后效性,即当前的抉择不会对后面的抉择产生影响; 性质二:重复子问题,即把当前问题分解为k个问题。然后定义状态,写出状态转移方程,并从时间和空间的角度优化 状态和状态转移方程。然后注意处理边界情况。这题直接定义 dpij表示走到第原创 2017-04-29 00:12:19 · 773 阅读 · 0 评论 -
HihoCoder - 1174 拓扑排序·一 拓扑排序、BFS
拓扑排序基础题,判断图中是否有环。拓扑排序、BFS每次把入度为0的点删除后入队,进行BFS,最后如果有剩余没有删除的点,则存在环,否则没有。复杂度 O(n+m)原创 2017-04-22 13:52:09 · 1089 阅读 · 0 评论