动态规划
文章平均质量分 53
wlhz2017
这个作者很懒,什么都没留下…
展开
-
Educational Codeforces Round 137E 1743E FTL
有两艘飞船,分别有攻击力p和攻击充能时间t,初始未充能。敌船的血量为h防御s, 一个船独自打 伤害p1-s,俩船一起 伤害p1+p2-s求击败敌船最小时间因为血量5000范围小 按此dpdp 维护总计造成i伤害时最后一次是两个炮共同攻击需要最小时间枚举下一次共同开炮中间的独立开炮数。更新一遍后面的点复杂度n*n原创 2022-11-01 18:37:42 · 215 阅读 · 0 评论 -
Educational Codeforces Round 137C 1743C Save the Magazines
题意有n个箱子,第i个箱子里面装着ai个杂志。现在正在下雨,有一些箱子上面盖着盖板(如果一个箱子上盖了盖板,那么这个箱子里的杂志就不会被雨淋),并且可以将盖在第i个箱子上的盖板移到第i−1个箱子上(同一个盖板至多移动一次)。求不会被雨淋的杂志数量的最大值。思路dpij维护当前位置ij表示最后i是否有板时的最大值原创 2022-10-31 21:08:37 · 265 阅读 · 0 评论 -
Codeforces Round #829C CF1753C Wish I Knew How to Sort
bool数组要排序,每次随机选2数来冒泡,求期望次数。假设数组里有x个0,那么需要最后数组里左侧x个数都是0,以x数右侧为线,两侧本身内的移动对结果没有意义,左侧有x个数,初始有y个1,右侧就会有y个0,也就是y对的数需要swap,计为dp[y];如果要消除一个对, 概率为左侧y种选择* 右侧y种选择 / 选出1对数 = y * y / C(n,2)期望为反比 C(n,2) * inv(y) *inv(y)for(i,1,y) ans += c(n,2)* inv(y) * inv*原创 2022-10-24 14:27:37 · 71 阅读 · 0 评论 -
HDU 5602/BC 67C Black Jack
比较复杂的一个题 需要dp两次 首先要用dp推出 闲家最终为x点庄家赢的概率 然后在递推出闲家和庄家初始状态下 闲家获胜的概率 比赛的时候好不容易敲出来了 接过没过终判 是由于判断闲家时 当庄家与闲家一致 且庄家再继续输赢概率一样 时 我默认是继续摸 结果终判就挂了 后面改成 不继续抓就过了。。。#include#include#include#include#include#i原创 2016-01-29 22:27:08 · 526 阅读 · 0 评论 -
HDU 4958/BC 5C Poor Rukaw
博弈+概率dp题目大意:2个人玩游戏,其中甲随手玩。。。乙认真玩,开始n堆石子,每次拿2堆相减后放回去,最后剩奇数甲赢,否则乙赢。赢的得n分,下一轮n堆石子恢复,上轮输者删掉其中一堆,问最后乙得分的期望。首先,由于是博弈,从必败态开始分析,对于甲来说,最后一次奇数是必胜的,而每次转移状态的操作,只有 拿出两个奇数 变成偶数,奇偶变奇,偶偶变偶三种,不管哪种,奇数数量是减少2个或0个,即每次原创 2015-08-01 11:20:37 · 528 阅读 · 0 评论 -
HDU 5084/BC 15C HeHe
题意:给出数值T,按图片构造出M矩阵,求的是M*M的结果矩阵中,i行j列的值,并且i和j是+前一组ans的 也就是强制在线题解:因为是赛后做的,队友发现在杭电上竟然可以暴力M*N水过...什么强制在线都是逗你玩的... 不过其实BC的服务器要慢一些,所以比赛时是不能暴力的,所以还是想了n²的做法因为矩阵很特殊,所以第i,j的值和第i+1,j+1的值 只差了两对数的乘积,所以先暴力跑出最原创 2016-07-26 22:13:20 · 330 阅读 · 0 评论 -
HDU 4991 / BC 8C Ordered Subsequence
题意:求原序列有多少个长度不大于m的上升子序列注意到m只有100,所以dp即可,对于当前值,左侧比它小的值作为序列末尾有a[i]个长度为i的,则可以推算出以当前值为末尾的有a[i]个长度为i+1的 并且会新形成一个长度为1的至于如何计算左侧长度为i的可选序列的个数,可以用m个树状数组来维护#include#include#include#include#include#inc原创 2016-07-17 10:24:53 · 289 阅读 · 0 评论 -
HDU 5725/2016多校1C Game
题意:给一个图,其中包含一些点G表示障碍,并且两个G不会共行共列或有任何相交的点或边。求任意两点(不包含G)间的最短距离的期望题解:所求的期望即最短距离和除以点对数,点对数即非G点的数量的平方。首先G的分布很有特点,也就较稀疏,只有很少的路径会被影响,也就是官方题解所说的两个点之间的路径最多被一个G所影响,并且被影响也只是会多走两条边,那么我们可以先计算不考虑G时两点之间最短路径总原创 2016-07-29 15:24:28 · 450 阅读 · 0 评论 -
HDU 5779/BC 85D Tower Defence
题解:因为要满足从点1到所有点没有最短路等于k(不考虑无穷,也就是都小于k) 可以分成维护 第i层到1的距离为i-1 第一层只有1这一个点 dp维护之前用了多少个点 上一层用了多少个点 每次再枚举这一层用了多少个点 那么dp[i][j+now][now](到第i层 共用了j+now个 这层用了now个) 应该由 dp[i-1][j][k]推过来 此时方案数应该为dp*原创 2016-07-31 10:22:48 · 407 阅读 · 0 评论 -
HDU 5807/BC 86D Keep In Touch[时间换空间]
题解:比赛的时候复杂度分析错了....不知道怎么想的就觉得是n3的复杂度了...其实分明是n6的...仔细想可以换一种dp方式,用少量的空间换时间,每次走的时候不是三个人一起走,而是一个一个人走dp[i][j][k][zt] i,j,k分别表示三个人所占的位置。zt=2表示现在三个人处于同一时刻,zt=1表示第一个人已经处于下一个时刻,zt=0表示前两个人已经处于下一个时刻。注意zt=原创 2016-08-07 16:31:46 · 463 阅读 · 0 评论 -
HDU 5526 Lie
一道很不错的背包 首先根据某学生所说 求出其所在班级人数 和他在他们班中排在第几个 这样 在确定的某个班级人数时 每个位置只能有一个学生 举个例子 有10个学生都说自己班级有5个人 而他们所在的位置分别为 1 1 1 2 2 3 4 5 5 5 而为了要使他们尽量多的人说真话 使尽量多的人在一个班级中 所以 可以有一个班级 有5个人 而第二个同等人数的班级最多只能有3个人(1,2,5) 第原创 2015-11-16 21:12:59 · 411 阅读 · 0 评论 -
UESTC 1225 Game Rooms
题意:一栋n层的楼,每层有ai个打乒乓球的人和bi个游泳的人,每层可以建一个游泳池或乒乓球室,每人人到其喜欢项目场所的最短距离的总和为m,求最小的m(且至少要有一个游泳池和一个乒乓球室)题解:依然是用动态规划去求解 dp[i][j] 中j为0表示在这i层建游泳池,且j+1层不能建游泳池,这样dp[i][0]可以由dp[j][1]推过来(j#include#include#include原创 2015-10-30 21:56:20 · 645 阅读 · 0 评论 -
UESTC 1218 Pick The Sticks
题意:给出一个长度为L的棍状容器 和n个长度为li价值为vi的棍状物品 物品只能直接放在容器上 且只要重心在容器上即可(包含边界)求能放置的物品的最大的总价值题解:很容易看出是动态规划的题目,而此题有一个重要的结论,你所选的物品中,可以将长度最长的两个置于两边,这样外延的长度尽量长,肯定是最优的,所以我们先按长度对物品从小到大排序,dp[i][j]表示到第i个木棍总长度为j时能获得的最大价值原创 2015-10-30 11:57:51 · 441 阅读 · 0 评论 -
HDU 4987/BC 7C Little Pony and Dice
这题的题意表述比较恶心人 比赛时死后没读懂,样例也不好回推出题意,题目大意是这样的,有从0到n的n+1个各种,走过n就结束,走到n就赢,m面的骰子第i面为i。现在仍n次,每次扔出多少点走多少格,求赢的概率。如果比赛n,m都特大 只是很常规的dp题,一般这种类似的题都是求种类数,而这题让求概率的,概率的特点是在0到1之间,波动较小,尤其当nm很大后 很可能趋于稳定,所以我们不妨试着用dp去求。某原创 2015-08-01 15:33:02 · 639 阅读 · 0 评论 -
UVA 1025 A Spy in the Metro
题意:某城市的地铁是线性的,有n个车站,编号1~n。有M1辆列车从第1站开始往右开,还有M2辆列车从第n战开始往左开。在时刻0,Mario从第一站出发,目的是在时刻T会见车站n的一个间谍。在车站等车时容易被抓,所以她决定尽量躲在开动的火车上,让在车站等待的总时间尽量短。列车靠站停车时间忽略不计,且Mario身手敏捷,即使两辆方向不同的列出在同一时间靠站,Mario也能完成换乘。其实是一道简单d原创 2015-09-28 18:11:12 · 373 阅读 · 0 评论 -
HDU 5209 Magic Toy Brick
很好的一道dp题首先可以推算出一行之中放n个最大m时的方案数为C(n+m-1,n)设dp[n]表示n行的方案数 首先第一行 的第一个数应该是最小的 第一行的其他数是任意的 所以这一行取j个数时 的方案为C(n-1,j) * dp[n-j-1] (下面一行遵从同意的规则)当时做的时候脑子抽了 写了个dfs以为是n²的 结果T了 调试了半天 才发那是n!的(>﹏<) #include原创 2015-10-03 02:12:26 · 361 阅读 · 0 评论 -
UVA 10285 Longest Run on a Snowboard
题意:给出一些山的高度 求最长路径长度 每次只能往上下左右4个方向 且只能从高往低处走比较简单的dp 把高度作为第一维 每次找到高度为i的所有点 向4个方向判断能否更新即可 (可以事先把某个高度对应的点的坐标存起来 这样会更快)#include#include#include#include#include#include#include#include#include#原创 2015-10-07 15:22:35 · 271 阅读 · 0 评论 -
UVA 1213 Sum of Different Primes
题意:求一个数n由k个不同的素数组成的方案数还是dp 首先需要把素数筛出来 然后要注意一点dp的顺序 每个素数只能用一次 所以要把每个素数作为第一维 枚举第i个素数是否选取 来更新dp[j][k] 中j表示已经选取的素数个数 k表示这j个数的总和 dp存的是方案数#include#include#include#include#include#include#incl原创 2015-10-07 15:32:07 · 464 阅读 · 0 评论 -
HDU 5230 ZCC loves hacking
一道非常好的dp题 首先可以看出c是没什么用的 用l和r减去c得到真正的l,r即可 注意到l,r的范围 是小于n,c的 即真正的l,r是小于n的 而所求的问题转换成 1到n的数中 不重复的选取 有多少种选取方案的总和位于l,r之间从而可以转化为 求有多少种选取方案的总和小于等于x 设为f(x) 答案即为 f(r)-f(l-1) 而我们先可以求出有多少种选取方案的总和等于x 设为 g(原创 2015-10-10 17:04:41 · 559 阅读 · 0 评论 -
HDU 5225 Tom and permutation
对于连续的排列直接的逆序 打表或者首先就可以看出规律设f(n)表示n个数时 每个排列所对应的逆序数显然有 f(1)=1, f(2)=0,1 , f(3)=0,1,1,2,2,3 , f(4)= 0,1,1,2,2,3, 1,2,2,3,3,4 , 2,3,3,4,4,5 , 3,4,4,5,5,6即为f(n-1)的所有的数为一组 扩展成n组 第一组为f(n-1) 后面每组比前一组中原创 2015-10-10 17:59:20 · 333 阅读 · 0 评论 -
HDU 5136 Yue Fei's Battle
题目大意:求最长链为k的二叉树的方案数由于是要求方案数 所以就是找规律或者dp 由于要mod1e9+7 所以排除了找规律 然后就尝试着用dp去做我们先考虑树的一半的情况 先将k/2的链放置好 叶子处标号为1 则标号为i的点 可以另外连一个深度小于 i-1的子树 而dp[i]维护的是到i节点 深度为i的树的方案数 而dp[i]的前n项和则表示深度小于i的树的方案数 这里我们用f[i]表原创 2015-09-23 10:41:15 · 503 阅读 · 0 评论 -
hdu 5365 /BC 50CThe mook jong
简单dp 还是习惯 用记忆化搜素去写 以为这样不用初始化1 2 3的值 更优美唯一tirck点是 数据在接近60时会爆int#include #include #include #include #include #include #include #include #include #include#include#define bug puts("bugbugbu原创 2015-08-09 10:27:23 · 283 阅读 · 0 评论