HDU
文章平均质量分 74
SeasonJoe
这个作者很懒,什么都没留下…
展开
-
背包问题
参考文献:背包九讲一:01背包问题最基础的背包问题,关键是每个物品只要一件,基本的状态转移方程就是:f[i][v]=max{f[i-1][v],f[i-1][v-w[i]]+v[i]} 有个需要注意的地方是:要求恰好装满背包,那么在初始化时除了f[0]为0其它f[1..V]均设为-∞,这样就可以保证最终得到的f[N]是一种恰好装满背包的最优解。如果并没有要求必须把背包装满,而是只希望价原创 2016-03-11 15:46:29 · 443 阅读 · 0 评论 -
HDU3635 Dragon Balls(并查集)
题意:n个城市中有n个龙珠,一开始按顺序排列,但龙珠会转移,输入T A B 代表现在龙珠A所在城市中的所有龙珠都转移到龙珠B所在的城市中,Q A 代表查询龙珠A的所在城市和城市中有多少龙珠以及龙珠A转移了多少次要点:其他不难,主要是查询龙珠A转移了几次这一步比较难,因为我们进行了状态压缩,所以每次只要根节点会增加转移数,而其子树中所有结点都是不增加的。所以我们另设一个数组来记录转移数,原创 2016-03-26 10:32:01 · 303 阅读 · 0 评论 -
HDU1272&&POJ1308 小希的迷宫&&Is It A Tree?(并查集)
题意:中文题不解释要点:两个点之间是否有多种路径就是判断是不是存在环路,所以合并时如果发现两个根结点是相同的,就说明存在环路了。并且还要满足顶点数=边数+1。这题比较恶心的地方在于,如果一开始输入0,0要输出Yes,输入部分比较难写167111702016-03-29 13:50:08Accepted127262MS3368K1009原创 2016-03-29 14:14:50 · 436 阅读 · 0 评论 -
HDU1213 How Many Tables(并查集)
题意:请客吃饭,认识的才能坐一桌,每次给两个认识的人,求需要多少桌要点:并查集裸题,就是多了一个求最后集合个数的步骤,要求最后集合个数,只要每次合并的时候当前集合数-1即可166721872016-03-25 21:55:04Accepted12130MS1728K738 BC++seasonal#incl原创 2016-03-25 22:20:56 · 349 阅读 · 0 评论 -
HUD3488 Tour(二分图的最小权值和)
题意:给你一个有向图,边有权值,现在要你求若干个环包含所有的顶点,并且每个顶点只出现一次(除了起点),求所有环中所有边得权值之和最小值。要点:因为每个顶点只出现一次,干脆所有环都拆成起点到一个点再回起点,这样就是一个二分图的最小权值和问题。前面做的题都是求最大权值和,最小权值和就是将每条边的权值取负,其他的都不用变(除了lx的取最大值),最后输出再取负即可。原创 2016-05-13 16:43:56 · 457 阅读 · 0 评论 -
HDU1166 敌兵布阵(线段树)
题意:中文题要点:就是一个单点更新的线段树问题,之前一直用线状数组,现在学了一下线段树,这两个能处理的问题都差不多,线段树好理解一些,基本就是存储将一个区间不断二分,形成一个树,方便查询和更新。#include#include#includeusing namespace std;const int N = 50000 + 5;int sum[N << 2];int原创 2016-10-15 16:12:10 · 296 阅读 · 0 评论 -
HDU3749 Financial Crisis(点双连通分量+并查集)
题意:给出一个图和一系列查询,查询是给出两个点,问两点之间有多少条点不重复的路径要点:明显是点双连通,如果u,v不连通(并查集处理)输出0;如果u,v处于同一个点双连通分量,输出2(注意这里如果这个分量只有两个点一条边输出1);如果不同,输出1即可。注意这题有个地方要处理,我们知道割顶可以是好几个点双连通分量的公共点,所以如果直接用白书上的bccno数组来判断割顶处于哪个点双连通分原创 2016-11-06 10:38:01 · 501 阅读 · 0 评论 -
HDU3394 Railway(点双连通分量)
题意:给出一个无向图,求出它的冲突边数和多余边数,冲突边就是那些同时存在于多个环中的边,而多余边是不在任何一个环中的边.。要点:多余边很明显就是桥,我们可以推断除冲突边只能在点双连通分量中,感觉边双应该也行,主要就是求出分量后看分量中点数n和边数m的关系,如果n#include#include#include#include#includeusing namesp原创 2016-11-11 07:36:51 · 407 阅读 · 0 评论 -
HDU3401 Trade(单调队列优化DP)
最近做CF的时候遇到单调队列优化DP的问题,看了一下网上这种题也很少,而且都很难理解,下面是两个解释的比较好的博客:单调队列优化DP的基本思路:点击打开链接两道例题详解:点击打开链接下面讲一下我自己对单调队列优化dp的理解,首先不是所有dp都可以使用单调队列优化的,只有形如 dp[i]=max/min (f[k]) + g[i] (k还是挺难理解的,现在水平可能不够吧,还是多做题。原创 2016-11-19 15:06:29 · 390 阅读 · 0 评论 -
HDU3944 DP?(大组合数取模:lucas定理)
题意:有一个杨辉三角,现在从顶点到第n行第k列,只能向下或向右下,问最短路径和模p的值。要点:如果n>2*m,此时一直往斜左上走到边界,再一直向上,这样最短,权值总和为C(n+1,m)+(n-m);如果n这里n和m很大,所以必须要用lucas定理,需要注意的是Lucas定理处理的p的范围大致为10^5数量级。这个博客写的还比较清楚:点击打开链接1830259原创 2016-09-20 16:08:20 · 489 阅读 · 0 评论 -
HDU1028 Ignatius and the Princess III(整数拆分:母函数||DP)
题意:给出一个值n,问有几种不同的拆分方法。要点:可以用母函数或DP来做,这里说一下母函数,基本思路是:写成(1+x^2+x^3+x^4……x^n)*(1+x^2+x^4+……)*(1+x^3+x^6+……)……这样,然后利用循环从每个括号开始算起,用c1存储前一次算出的所有指数对应的系数,c2暂存算上当前括号的对应系数,最后c1[n]就是答案。母函数:1828原创 2016-09-18 10:35:39 · 500 阅读 · 0 评论 -
HDU1160 FatMouse's Speed(DP+路径记录)
题意:输入一组小鼠的体重和速度,要求输出体重从小到大而速度从大到小的数目最多的小鼠的数量和具体序号。要点:简单的最长上升子序列,只要先排序再DP即可,就是要记录一下路径最后递归输出就行。174476802016-07-06 14:10:34Accepted11600MS1732K958 BC++seasonal原创 2016-07-06 14:43:37 · 379 阅读 · 0 评论 -
HDU1421 搬寝室(DP)
题意:中文题不解释。要点:要在n个中选k对,使每两个之差的平方和最小,可以用dp[i][j]来表示i个数中选了j对的最小值,以当前的第i个数来判断,如果不选这个数,说明就是前一个数的值,dp[i][j]=dp[i-1][j];如果选这个数,说明它前面的数也要被选,dp[i][j]=dp[i-2][j-1]+(val[i]-val[i-1])^2。状态转移方程就是:dp[i][j] =原创 2016-07-02 11:38:10 · 385 阅读 · 0 评论 -
HDU2571 命运(DP)
题意:中文题要点:期末考试考完了,继续刷题。这题就是个简单的DP,多决策分析,可以向右移一格,向下移一格,或是向右移动到当前列的倍数。状态转移方程很容易写出来是:dp[i][j]=max(dp[i-1][j],dp[i][j-1],dp[i][j/k]),注意这题有负数,边界条件设为一个较小的负数。174164162016-07-01 13:44:2原创 2016-07-01 14:03:27 · 387 阅读 · 0 评论 -
HDU1248 寒冰王座(完全背包)
题意:中文题不解释要点:就是个完全背包的水题变形,注意因为最后钱用不完,所以d数组一开始全赋值为0。#include#include#include#includeusing namespace std;const int inf = 0x3f3f3f3f;int spend[3] = { 150,200,350 };int d[10005];int dp原创 2016-05-15 14:01:48 · 453 阅读 · 0 评论 -
HDU 2255 奔小康赚大钱 (二分图:KM算法)
题意:中文题不解释要点:KM算法是求完备匹配下的最大权匹配: 在一个二分图内,左顶点为X,右顶点为Y,现对于每组左右连接X[i]Y[j]有权w[i][j],求一种匹配使得所有w[i][j]的和最大。注意完备匹配定义:|X|=|Y|=匹配数。这算法还是比较难的,证明我还是半懂不懂的,具体流程还是可以的。基本上就是利用增广路,不断修改点标,找可行边什么的。参考博客:点击打开链接这题原创 2016-05-12 15:42:19 · 372 阅读 · 0 评论 -
HDU4135 Co-prime(容斥原理)
题意:寻找(a,b)中与n互质的数的个数要点:参考博客点击打开链接,求互质一般都是用容斥原理。166148282016-03-20 11:03:58Accepted41350MS1780K872 BC++seasonal#include#include#include_int64 a[1000], num;原创 2016-03-20 11:24:01 · 296 阅读 · 0 评论 -
HDU2191 多重背包
题意:中文不解释要点:多重背包裸题,主要是用了两种做法,一种直接按个数全拆成01背包,复杂度是O(V*Σn[i]);一种用二进制拆成复杂度为O(V*Σlog n[i])。复杂度是O(V*Σn[i]):165711182016-03-16 15:17:11Accepted219131MS1416K512 BG++se原创 2016-03-16 15:33:25 · 296 阅读 · 0 评论 -
HDU1856 More is better(并查集)
题意:王老师要找一些男生帮助他完成一项工程。要求最后挑选出的男生之间都是朋友关系,可以说直接的,也可以是间接地。问最多可以挑选出几个男生(最少挑一个)。要点:并查集水题,只要求那个集合中个数最大即可,就是数据比较大,所以rank数组就不开了。166989032016-03-28 11:24:07Accepted1856374MS79996原创 2016-03-28 11:27:46 · 292 阅读 · 0 评论