
hdu
文章平均质量分 78
njlcazl
这个作者很懒,什么都没留下…
展开
-
【hdu3555】【数位DP】Bomb
较裸的数位DP,不过也是我的第一道数位DP,使用记忆化的方法实现比较简洁。代码:#include#includeusing namespace std;const int maxn = 20;int dig[maxn];long long dp[maxn][maxn][2];long long n;void init(){ freopen("hdu3555.in","r"原创 2013-03-04 21:57:52 · 352 阅读 · 0 评论 -
【hdu3081】【二分法】【最大流】【并查集】Marriage Match II
稍微综合一点的题目。建图方法:对每个女孩喜欢的男孩,连一条容量为1的边若两个女孩a,b是朋友,则对于a连了边的男孩,b也要连边,使用并查集维护然后二分出游戏进行的回合数p,s -> 每个女孩,容量为p;每个男孩 -> t,容量为p若最大流 =n * p说明p是可行的,这样就可以得出最多进行的回合数了。代码:#include#includeusing name原创 2013-05-13 10:21:37 · 615 阅读 · 0 评论 -
【hdu2243】【AC自动机】【矩阵乘法】考研路茫茫——单词情结
首先利用补集转化思想,将问题转化为求一个词根都不包含的单词有多少种。可以想到将所有的词根建为AC自动机,然后使用DP求解。由于长度范围很大,可以使用矩阵乘法加速。并且题目中要求的是“长度不超过L的”,所以要求sum= A ^ 1 + A ^ 2 + A ^ 3 + ...... + A ^L所有情况tot = 26 ^ 1 + 26 ^ 2 + 26 ^ 3 + ...原创 2013-05-11 16:55:56 · 841 阅读 · 0 评论 -
【hdu4010】【link-cut tree】Query on The Trees
题目大意:给出一棵树,有四种操作:1、连接两棵子树2、断开树上的一条边,使其成为两棵子树(Ps:必须以x为跟,断开y的子树)3、给x到y这个路径上的所有节点增加w的权值4、询问从x到y的路径上点权最大的值写这种代码量稍微长一点的我总是要手残。。。第2个操作Ps中的内容我最开始没注意到,调了很久都WA,最后去网上找到标程才发现。所以认真审题真的很重要,有人在考试中为了原创 2013-04-16 10:33:24 · 689 阅读 · 0 评论 -
【hdu3820】【最小割】Golden Eggs
很巧妙的建图方法。一开始只想到将单个颜色的做法,对于多个颜色就没想出来怎么建图了。大体思路还是二分图最大独立集的方法。首先黑白染色,分成黑白两个集合。设金的价值为val1,银的价值为val2由于有两种颜色,考虑将每个点拆成两个点k,k'对于白色集合的点,k代表金,k'代表银;对于黑色集合的点,k代表银,k'代表金白色集合的点:s -> k,流量val1 ; k' -原创 2013-05-18 21:27:55 · 817 阅读 · 0 评论 -
【hdu3062】【2-sat】Party
2-sat的入门题吧,只需要按照题意建图就好。判定是否有解是2-sat的题型之一。#include#includeusing namespace std;const int maxn = 2000 + 10;const int maxm = maxn * maxn;struct Edge{ int pos; int next;}E[maxm];int head[ma原创 2013-05-01 17:02:42 · 581 阅读 · 0 评论 -
【hdu3037】【Lucas定理】Saving Beans
经过推导答案为C(n + m,m)但是n和m的范围相当大,所以我们可以使用Lucas定理,它可以用来解决大组合数取模的问题。定理的内容:A、B是非负整数,p是质数。AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0]) mod原创 2013-04-27 16:32:06 · 685 阅读 · 0 评论 -
【hdu3046】【最小割】Pleasant sheep and big big wolf
很直观的最小割模型。建图方法:1连源点,2连汇点,容量为inf,格子之间连边,容量为1代码:#include#includeusing namespace std;const int dx[] = {-1,1,0,0};const int dy[] = {0,0,-1,1};const int inf = 0x3f3f3f3f;const int cns = 200 + 1原创 2013-04-22 11:41:10 · 570 阅读 · 0 评论 -
【hust1024】【二分法】【最大流】dance party
首先二分一个答案,然后将男孩和女孩都拆为2个点,源点s向男孩1连一条容量为二分值的边,女孩2向汇点连一条容量为二分值的边,男孩1向男孩2连容量为k的边,男孩1向喜欢的女孩1连容量为1的边,男孩2向不喜欢的女孩2连一条容量为1的边,女孩2向女孩1连一条容量为k的边,若最大流 >= n * 二分值,说明可行。代码:#include#includeusing namespace std;原创 2013-04-22 11:46:05 · 713 阅读 · 0 评论 -
【hdu3473】【划分树】Mininum Sum
题目大意: 给出一个数字序列,每次询问[l,r],要求从[l,r]中找出一个x,最小化∑abs(x - xi),i ∈ [l,r]首先容易得到,题目要求的是找出一段区间中位数,输出∑x - xi,x为中位数去掉绝对值后,我们可以得到ans = x(leftnum - rightnum) + (rightsum -leftsum)leftnum和leftsum分别表示中位数左原创 2013-04-08 17:36:45 · 630 阅读 · 0 评论 -
【hdu1823】【二维线段树】Luck and Love
这道题是一道二维线段树的裸题。由于浮点数最多一位,所以我们可以先转化成整数,输出时除以10;另外当两个人身高和活泼度都相等时,要取魅力值大的一个,所以要取最大而不能直接赋值。代码:#include#include#includeusing namespace std;const int maxn1 = 100 + 10;const int maxn2 = 1000 + 1原创 2013-04-03 17:41:22 · 562 阅读 · 0 评论 -
【hdu2896】【AC自动机】病毒侵袭
同样是一道很裸的AC自动机,统计哪些特征码出现在网站的源码上,匹配成功时不要将val赋值为0,因为后面还有文本串要匹配,另外要注意编号需要从小到大输出。代码:#include#include#includeusing namespace std;const int maxn = 100000 + 10;const int maxm = 500 + 10;const int ma原创 2013-03-21 16:15:55 · 613 阅读 · 0 评论 -
【hdu2222】【AC自动机】Keywords Search
第一道AC自动机题目,这道题是模板题,唯一需要注意的是模式串可能会重复,所以需要累加。代码:#include#includeusing namespace std;const int maxn = 10000 * 50 + 100;const int max_node = 1000000 + 10;const int child_num = 26;const int max原创 2013-03-19 22:17:35 · 494 阅读 · 0 评论 -
【hdu4389】【数位DP】X mod f(x)
跟上一题状态表示差不多,只是如果要直接在状态中表示数位和很麻烦,考虑数位和最多为81,所以我们可以枚举每个数位和,累加答案。代码:#include#includeusing namespace std;const int maxn = 11;const int maxsum = 82; int dp[maxn][maxsum][maxsum][maxsum];int dig原创 2013-03-29 09:07:14 · 597 阅读 · 0 评论 -
【hdu3652】【数位DP】B-number
题目大意:求1-n中所有数字本身包含字符串“13”且能被13整除的数。设计状态:pos -> 当前进行到第pos位pre -> 到目前为止的余数是多少have -> have = 0 表示还未出现1;have = 1 表示出现了一个1; have = 2 表示已出现字符串“13”inf -> 有没有到上限这样我们就可以使用记忆化搜索简洁地来实现。代码:#incl原创 2013-03-29 09:02:37 · 548 阅读 · 0 评论 -
【hdu3487】【splay】Play with Chain
题目大意是一串链子,要求支持两项操作:1、从链子中切下a-b区间,然后整体插入到位置k的数的后面(注意这里的k是对于切下之后的位置k)。2、翻转a-b这个区间的数这道题是典型的splay题目。具体操作就是:先提取出a-b这一段区间,然后记录一下区间位置,并且清除,然后再提取出第k个数,插入即可。第二个操作则是使用lazy标记,不断交换左右子树,实现翻转。代码:#in原创 2013-03-04 21:53:51 · 365 阅读 · 0 评论