HDU
VVVLeHr
这个作者很懒,什么都没留下…
展开
-
HDU - 3974 Assign the task DFS括号引理+线段树
原题目链接 题意是给你一棵树,然后有两类操作,一种是将某个节点以及它所有的子孙修改成某个数,另一种是查询该节点的值。所有节点的初始值为-1; 思路 说实话不好联想到线段树上来,如果用暴力修改每棵子树的话每次修改的复杂度都可以达到O(n),不过我当时想到可以另外建立一棵结构相同的懒惰标记的树。但是复杂度并没有变化。 在学习图论的时候学DFS生成树的时候有一个叫做括号引理的结论。对于每个节点u,设d...原创 2020-03-20 13:22:13 · 338 阅读 · 0 评论 -
关于邻接矩阵和邻接表
关于临界矩阵和邻接表的使用情况 在很多图论的题目中,如果题目本身没有明确指出两个顶点只有最多只有一条直达的边的话那么最好使用邻接表来存储所有的边,因为邻接矩阵会用某一条边来覆盖之前的边,这条边可以是最后输入的边,也可以是你设定了相应条件的边,如果这下边的边权不一样,就会很容易出现错误。比如求最短路的时候用之后出现的边覆盖了最短的边,或者是求边的入度出度的时候只记录了一条边以至于出错。 HDU 33...原创 2019-02-26 20:48:26 · 302 阅读 · 0 评论 -
HDU 1203 01背包
I NEED AN OFFER Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 37102 Accepted Submission(s): 14891Pr...原创 2019-03-01 22:16:14 · 180 阅读 · 0 评论 -
HDU 2094 产生冠军 判断能否拓扑排序
产生冠军 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 23900 Accepted Submission(s): 10775Problem Descr...原创 2019-02-24 22:32:20 · 138 阅读 · 0 评论 -
HDU-1864 01背包
题意:给定n张发票,每张发票有m中项目,其中只有A,B,C三种发票可以被报销,每张发票单种报销上限是600,单张发票最大报销额为1000,最终最大报销额为q。求能够报销的最大金额。思路:01背包,报销金额是浮点数,所以改用发票数作为背包,背包容量是满足报销条件的发票数cnt。物品价值是每张发票报销额,存在val中。转移方程dp[v]=max(dp[v],dp[v-cost]+weight)。另外注意原创 2017-10-24 20:06:40 · 228 阅读 · 0 评论 -
HDU-2955 01背包
题目链接:杭电oj高校二级域名一律不得访问,有机会再补上(flag)题意:题意读了很久才懂。一个强盗想要抢劫,他有一个被抓的最大概率,他抢劫每个银行都有一个相应的概率,希望可以尽可能多的抢劫,但是总的被抓概率不会低于给定的概率。思路:可以看出来是一个01背包,但是如果直接用最大概率作为背包由于精度和时间复杂度都不可能满足。所以应该用所有的银行总价值作为背包,被抓概率作为价值。但是这里的概率不能简单相原创 2017-10-23 23:41:13 · 161 阅读 · 0 评论 -
HDU-1698 Just a Hook 线段树区间更新
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698题意:一个长度为n的线段,q个操作,每个操作x,y,z是指把区间[x,y]内的值修改为z,最后求线段值的和。思路:增加懒惰标志,每次更新操作只更新到这个区间节点而不是这个区间的所有叶子结点。例如操作1,5,2。只更新到节点[1,5]而不是他的五个叶子结点。这个时候会把节点[1,5]节点标志为2,如果原创 2017-10-03 20:03:07 · 352 阅读 · 0 评论 -
HDU1166 线段树 或 树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166题意:给定一个区间长度,三种操作,ADD i, j是将id为i的位置的值增加j;SUB i,j是将id为i 的位置的值减j;QUERY i,j为查询闭区间i,j的和。很经典的线段树单点修改和区间和查询。#include <iostream> #include <stdio.h> #include <原创 2017-09-25 21:39:18 · 210 阅读 · 0 评论 -
HDU 1754 线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754题意:给你n个数,m个操作,Q A B代表询问区间[A,B]的最大值,U A B代表更新A点的值为B。思路:也是个简单的单节点更新的线段树,没有啥难度,但是在输入的时候被坑了一下,记得要getchar()掉回车,否则EOF没有用。#include <iostream> #include <stdio原创 2017-09-27 19:22:50 · 206 阅读 · 0 评论 -
HDU-2612 BFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612题意:给一个m*n的图,求Y和M到图上所有的@的和的最小值。数据200*200思路:一开始觉得可以每遇到一个@就bfs一次,更新其到Y和M的最小值,这样比较好些。后来考虑到极限情况下可能有很多@,复杂度会很高,所以转换到用两个dis二维数组存储Y和M到所有的@的距离,这样就可以只遍历两次就够了,另外原创 2017-09-21 22:23:37 · 217 阅读 · 0 评论 -
HDU 1495 BFS+模拟
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题意:一罐可乐容积s,两个杯子n,m。求最小的倒水次数使其平分。 思路:直接用BFS模拟,数据很小,不用担心会T,此处输出NO的情况为s是技术以及ans输出为0 的情况。#include <iostream> #include <cmath> #include <stdio.h> #inclu原创 2017-09-20 22:48:33 · 209 阅读 · 0 评论 -
HDU2846 简单字典树
由于模式串不一定是以前缀出现,所以普通的字典树插入是不行的。可以考虑将母串的每一个后缀串都插入一遍,就可以达到查询时遍历母串的所有位置为起点,而不是仅仅以前缀的遍历方式。此外还要考虑到诸如样例中的用d去匹配add,按上述方式会产生重复,所以可以考虑在Trie结构中加入id编号,只有在不是同一个id时再进行计数。详情看代码。#include #include #include #include原创 2017-09-14 22:10:11 · 313 阅读 · 0 评论 -
HDU-2050 折现分割平面 递推
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2050题意:用m个V字最多可以分割多少个平面。思路:直接推V字的公式有点难,我们可以尝试从常见的直线型来入手。直线型的思路当然是每次新增的第n条直线都切割了平面上的所有n-1直线,显而易见这个时候会新增n-1个点。然后就可以找一下规律了。手推一下序列为2,4,7,11……发现每次都加n,所以可原创 2017-10-07 22:28:30 · 328 阅读 · 0 评论 -
HDU-2084 基础dp
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2084题意:比较经典的一道题目,给一个数塔,从顶端走到底端,能走相邻位置,求路径最大权值。思路:从最后一层往前面考虑,因为最多可能有n个出口,并且都在最底层,所以从这里往前面推,每往上一格所得到的最优解都是这个出口的最优解。所以就可以很简单的写出状态转移方程:dp[i][j]=max(dp[i原创 2017-10-07 19:23:51 · 208 阅读 · 0 评论 -
HDU 1394 暴力 或 归并排序 或 线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394题意:给定n个数,一个合法操作是每次可以将数列的第一个元素放到数列的尾部,然后问你所有可能操作中的逆序对的个数最少是多少。一个逆序对(ai,aj)的定义是数列a中下标 i 小于 j 同时 ai 大于 aj。思路:看到数据范围只有5000,一开始就往暴力方面想了。然后模拟一下发现了一个比简单的规律。原创 2017-09-27 21:07:26 · 276 阅读 · 0 评论