随笔分类 -  动态规划 DP

摘要:Problem - E2 - Codeforces 题意: 有n个正整数,你至多可以把其中k个修改为任意的正整数 你需要把这n个数划分为若干个连续的段,满足每一段的任意两个数的乘积都不是完全平方数 问最少划分为多少段 任意两个数的乘积都不是完全平方数 等价于 把区间内的数质因子分解,每个质因子的指数 阅读全文
posted @ 2021-11-12 19:39 TRTTG 阅读(135) 评论(0) 推荐(0) 编辑
摘要:Problem - 1606E - Codeforces 题意: 有n个英雄,每一轮每个英雄向除自己之外的所有英雄发动一次攻击 每个英雄有初始血量,当承受攻击次数>=初始血量时,英雄死亡 如果最后存在一个英雄活到了最后,他就获胜 英雄初始血量上限为x 问有多少种英雄初始血量方案数,满足最后没有获胜的 阅读全文
posted @ 2021-11-10 19:07 TRTTG 阅读(123) 评论(0) 推荐(0) 编辑
摘要:Problem - 1582E - Codeforces 把数组翻转一下 问题变成了每段数字个数增多,总和减少 这样的好处是可以直接求段数的最大值 dp[i][j]表示前i个数可以组合出前j段,且第j段的和最大时的最后一个位置 因为每一段的和逐渐减小,所以前面的和越大越好 j最大是根号级别,所以复杂 阅读全文
posted @ 2021-11-07 18:06 TRTTG 阅读(94) 评论(0) 推荐(0) 编辑
摘要:Problem - 1458B - Codeforces 题意: 有n个瓶子,每个瓶子有容量、已有水量 你可以倒水,若把瓶子A中的x体积水倒入瓶子B,实际倒进去的只有x/2 即A减少x,B变为min(原有水量+x/2,容积) 你可以选择k个瓶子作为最终的储存水的瓶子,最大能储存多少体积的水 对k从1 阅读全文
posted @ 2021-10-19 12:03 TRTTG 阅读(51) 评论(0) 推荐(0) 编辑
摘要:https://acm.hdu.edu.cn/showproblem.php?pid=7055 给出一个只含有小写字母组成的串s sqc(s,l,r,c)表示字符c在s的[i,j]内的出现次数 设f[i]表示以i结尾的子区间字符串的答案 考虑从f[i]推到f[i+1] 由i到i+1,假设s[i+1] 阅读全文
posted @ 2021-09-03 11:24 TRTTG 阅读(35) 评论(0) 推荐(0) 编辑
摘要:https://acm.hdu.edu.cn/showproblem.php?pid=6991 题意: 给一个n的排列, 问有多少个极长上升子序列 设f[i]表示以i结尾的极长上升子序列个数 初始化:若第i个数是前i个数里最小的,则f[i]=1 j对i有贡献,当且仅当不存在k,满足j<k<i 且 a 阅读全文
posted @ 2021-08-18 10:46 TRTTG 阅读(71) 评论(0) 推荐(0) 编辑
摘要:https://acm.hdu.edu.cn/showproblem.php?pid=6981 题意: 给出2个n*n的矩阵A和B 起点在(1,1),终点在(n,n),每步只能往右或者往下走 得分为路径上的A的和与B的和的乘积 问最大得分 数据随机 解法一:搜索剪枝 因为是随机数据,估价函数优秀一些 阅读全文
posted @ 2021-08-11 09:54 TRTTG 阅读(57) 评论(0) 推荐(0) 编辑
摘要:https://vjudge.net/problem/UVA-11077 题意: 给定n和k,问有多少n的排列能够通过至少k次交换变成{1,2,3,……n} 一个排列P变成{1,2,3,……n}所需的最少交换次数 等于 {1,2,3,……n}变成P所需的最少交换次数 把P理解为一个置换,分解为循环 阅读全文
posted @ 2021-07-30 20:43 TRTTG 阅读(38) 评论(0) 推荐(0) 编辑
摘要:http://www.51nod.com/Challenge/Problem.html#problemId=1254 最终答案只有2种情况 1、不交换最大,相当于随便交换2个在最大子段和里的数。 2、把一个原本不在最大子段和里的数换到最大子段和里。 第1种情况就跑一遍求最大子段和就好 对于第2种情况 阅读全文
posted @ 2021-04-14 19:25 TRTTG 阅读(99) 评论(0) 推荐(0) 编辑
摘要:http://www.51nod.com/Challenge/Problem.html#problemId=1052 f[i][j][0/1]表示前i个数,划出了j段,第i个数可以不必使用/必须使用的最大值 如果第i个数必须使用,那么它可以加入前一个数所在的那一段(此时它的前一个数必须使用),也可以 阅读全文
posted @ 2021-04-05 21:45 TRTTG 阅读(48) 评论(0) 推荐(0) 编辑
摘要:https://atcoder.jp/contests/arc116/tasks/arc116_c 题意: 给出2个正整数n和m 问能构造出多少个长为n的序列a,满足1<=ai<=m且a[i]%a[i-1]=0 因为a[i]%a[i-1]=0 所以这个序列是不降序列 进一步可以得出不同的数字个数不会 阅读全文
posted @ 2021-03-29 16:15 TRTTG 阅读(153) 评论(1) 推荐(0) 编辑
摘要:https://ac.nowcoder.com/acm/contest/11168/F 先考虑如何求给出的n个数有多少个不同的子序列 用f[i]表示以i为最后一个数字的子序列的个数 f[i]= 1 + ∑ f[j] (1<=j<=k) 意为在之前求出的所有子序列最后加上x,都可以构成一个新的>1的子 阅读全文
posted @ 2021-03-15 14:38 TRTTG 阅读(172) 评论(0) 推荐(0) 编辑
摘要:https://atcoder.jp/contests/abc182/tasks/abc182_f 题意: 有n种面值的货币a[i],满足a[i]是a[i-1]的倍数,a[1]=1 有一种价值为x的商品,付款y元,找零y-x元 问满足以下2个条件的y有多少种 条件1:付款和找零时,使用的货币数量在对 阅读全文
posted @ 2020-11-13 19:56 TRTTG 阅读(364) 评论(0) 推荐(1) 编辑
摘要:https://www.luogu.com.cn/problem/P3953 k=0: 直接在spfa过程中最短路计数。 没有0边: 定义路径长度的增量为它比最短路多的距离 dp[i][j]表示从1到i,路径长度增量为j的路径条数 枚举一条从u->v,距离为w的边 新的增量为dis(1,u)+w-d 阅读全文
posted @ 2020-11-10 13:25 TRTTG 阅读(227) 评论(3) 推荐(0) 编辑
摘要:https://ac.nowcoder.com/acm/contest/3004/J 我的思路: 维护到达每个路口的累计宝可梦战斗力递增序列,同时记录相应时间 每次转移的时候,枚举每个路口,二分找到时间允许的最靠后的(战斗力最大的)那个来转移 题解思路: 一共200个路口,最大距离199,所以抓的上 阅读全文
posted @ 2020-03-03 21:33 TRTTG 阅读(296) 评论(0) 推荐(0) 编辑
摘要:https://ac.nowcoder.com/acm/contest/3006/F dp[i][0]表示到了第i句话,是前一次提交错误转移过来的 dp[i][1]表示带了第i句话,是前一次提交正确转移过来的 若前一次提交错误,那前一次的前一次肯定正确 dp[i][0]=dp[i-k][1] 若前一 阅读全文
posted @ 2020-02-13 20:10 TRTTG 阅读(125) 评论(0) 推荐(0) 编辑
摘要:https://vjudge.net/problem/UVA-861 题意: 在n*n棋盘上方k个互不攻击的象,求方案数 若两个象在同意对角线上,则会互相攻击 将棋盘黑白染色,则黑格不会攻击白格,白格不会攻击黑格 所以黑白格分开考虑 最终答案= Σ 黑格放i个*白格放k-i个 将所有黑格抽离出来,旋 阅读全文
posted @ 2020-01-30 22:18 TRTTG 阅读(284) 评论(0) 推荐(0) 编辑
摘要:http://codeforces.com/contest/1288/problem/C 题意: 用1—n构造两个长为m的数组a,b 满足a[i]<=b[i],a单调不减,b单调不增 求方案数 令dp[i][j][k] 表示构造了长度为i,a[i]=j,b[i]=k的方案数 dp[i][j][k]= 阅读全文
posted @ 2020-01-20 20:47 TRTTG 阅读(220) 评论(0) 推荐(0) 编辑
摘要:http://codeforces.com/contest/1293/problem/E 题意: 给出一棵n个点的树,将0—n-2作为边权,最大化 Σ mex(u,v) mex(u,v) 表示u到v的路径上最小的未出现过的自然数 将[0,m]加到一条链上,且这条链上加的边权大小 呈 一个向上凸起的单 阅读全文
posted @ 2020-01-20 17:32 TRTTG 阅读(552) 评论(0) 推荐(0) 编辑
摘要:骨牌覆盖问题: 用1*2骨牌完美覆盖n*m棋盘,求方案数 一、2*m 如果骨牌横着放,只能两个横着的骨牌摞在一起 如果竖着放,恰好占一列 所以dp[i]=dp[i-1]+dp[i-2] 即斐波那契数列 二、3*m 可以想到一个递推式:f[n]=a2*f[n-2]+a4*f[n-4]+a6*f[n-6 阅读全文
posted @ 2020-01-16 20:22 TRTTG 阅读(614) 评论(0) 推荐(0) 编辑