2012 ACM/ICPC Asia Regional Changchun Online
通道:http://acm.hdu.edu.cn/showproblem.php?pid=4267
题意:n个数,q次操作,每次操作有2种类型:
1:a,b,k,c 增加满足[a,b]中的i,使得(i-a)%k==0的i位置增加c
2:询问i位置的值
思路:(i-a)%k==0->i%k==a%k,对于更新的i位置,只要和a%k的值相同就可以了
定义bit[i][j][k]:节点为i时模j余k的变化量,树状数组对于1操作直接更新,对于2操作sum(bit[i][j'][a%j']){1<=j'<=10}
代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4267.cpp
标签:树状数组
通道:http://acm.hdu.edu.cn/showproblem.php?pid=4268
题意:给出N表示小A和小B各有N张卡,先给出小A的N张卡的长和宽(都是整数),然后是小B的N张,问小A最多能盖住小B多少张卡(必须长宽都比小B的大)
思路:长升序再宽升序,每次暴力找就可以了,找到了的记得删除掉
代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4268.cpp
标签:贪心
通道:http://acm.hdu.edu.cn/showproblem.php?pid=4270
题意:给出一个串,有3种操作,
思路:SAM可解决。
代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4270.cpp
标签:SAM
通道:http://acm.hdu.edu.cn/showproblem.php?pid=4271
题意:给定串长<=100000的循环母串和n(n<=10)且长度<=10的子串,问哪一个子串在母串中通过增加,删除,修改一个字母花费1变成母串中的 substring,求最小的花费,和对应字典序最小的子串。
思路:处理循环在母船后加10个字符就可以了,然后暴力枚举母串的s[i]开始的串和子串a[j]比较花费,算出每个a[j]的花费,最后排序就可以了。这里算花 费就是dp[i][j]:子串的前j位换成母串的前i位且完全匹配的花费.
转移dp[i][j] = min(dp[i - 1][j] + 1, min(dp[i - 1][j - 1] + !(s1[i - 1] == s2[j - 1]), dp[i][j - 1] + 1));
代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4271.cpp
标签:修改字符串dp
通道:http://acm.hdu.edu.cn/showproblem.php?pid=4272
题意:长度为n(n<=1000)的栈,栈顶元素可以与下面1~5个数中相同的元素消去,问最后能否都完全消去。
思路:加入第i位一直到i+5位都没找到相同的,这时候不要急,因为可能i+1位和i+6位消了,i就能匹配到i+6这个位置了,所以对于第i位,最多只能匹配到i+9这一位,所以状压这10位就可以了。dp[i][j]:深度为i,状态为j时能否全部消完。
代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4272.cpp
标签:状压
通道:http://acm.hdu.edu.cn/showproblem.php?pid=4273
题意:求三维凸包重心到各个面的距离,求最小值
思路:三维凸包重心模版题
代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4273.cpp
标签:三维凸包重心模版题
通道:http://acm.hdu.edu.cn/showproblem.php?pid=4274
题意:给出一些关系,用来描述整个公司的人员所领导的下属个数,现在问给定的这些关系是否存在矛盾的地方
思路:直接从叶子节点往上走就是了,存在矛盾就不行。
代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4274.cpp
标签:搜索
通道:http://acm.hdu.edu.cn/showproblem.php?pid=4276
题意:先给出N和T,表示有N个房间,T分钟内必须从1号房间走到N号房间。接下来N-1行,给出3个数,表示联通的两个房间和通过这条路的时间(不重复)。最后给出N个数,表示 每个房间的财宝。问从1-N的最大财富是多少
思路: 先跑最短路,看到达终点的花费是否小于T,如果满足则将最短路的权值置为0,然后树形DP,dp[i][j]:到达i节点花费为j的最大财富
状态转移:dp[i][j] = max(dp[i][j-w-k]+dp[son][k]);
代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4276.cpp
标签: 最短路+树形DP
通道:http://acm.hdu.edu.cn/showproblem.php?pid=4277
题意:给你n个有长度的线段,问如果用上所有的线段来拼1个三角形,最多能拼出多少种不同的
思路:暴力搜就可以了。复杂度3^n
代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4277.cpp
标签:暴力