动态规划
文章平均质量分 62
Bzdhxs_nt
这个作者很懒,什么都没留下…
展开
-
背包的综合记录
01背包求方案数思路cnt[i][j]cnt[i][j]cnt[i][j] 表示 考虑第 iii 个 物品,体积不超过 jjj 的最大价值的方案数类似于最短路求方案数cnt[i][j]=cnt[i+1][j−v[i]]cnt[i][j] = cnt[i+1][j-v[i]]cnt[i][j]=cnt[i+1][j−v[i]] ( f[i][j]<f[i+1][j−v[i]]+w[i]f[i][j] < f[i+1][j-v[i]]+w[i]f[i][j]<f[i+1][j原创 2022-04-24 14:46:09 · 205 阅读 · 0 评论 -
彩虹(状压dp)
题目link思路经典状压 dpdpdp用 [0,7m)[0,7^m)[0,7m) 来表示状态每列的涂色状态注意判断相邻同色的方法!代码int qmi(int a,int b){ int res =1; while(b){ if(b&1) res = res*a; a = a*a; b >>= 1; } return res;}int n,m;vector<int> stat原创 2022-04-18 10:27:15 · 200 阅读 · 0 评论 -
POJ - 2955 Brackets 区间dp
题目link思路经典区间 dpdpdp 转移方式题目已经给了考虑 dp[i][j]dp[i][j]dp[i][j] 表示在 [i,j][i,j][i,j] 区间内可以匹配的括号对的数量状态转移f[i][j]=f[i+1][j−1]+check(i,j);f[i][j] = f[i+1][j-1] + check(i,j);f[i][j]=f[i+1][j−1]+check(i,j);f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]);f[i][j] = max(f[i]原创 2022-04-11 19:36:12 · 149 阅读 · 0 评论 -
Array Division(背包)
题目link思路考虑 f[i]f[i]f[i] 表示以 iii 结尾最多可以分的区间个数显然 当 a[i]−a[j]>=b[i]−b[j]&&f[j]!=−1a[i] - a[j] >= b[i] - b[j] \&\& f[j] != -1a[i]−a[j]>=b[i]−b[j]&&f[j]!=−1时f[i]=max(f[j]+1,f[i]),j∈[0,i−1]f[i] = max(f[j]+1,f[i]) ,j \in [0,i原创 2022-04-11 01:06:32 · 386 阅读 · 0 评论 -
PTA - 至多删三个字符(dp)
题目link思路考虑dp[i][j]dp[i][j]dp[i][j] 前iii个字符删去jjj个的方案数不考虑重复dp[i][j]=dp[i−1][j](不取第i个)+dp[i−1][j−1](取第i个)dp[i][j] = dp[i-1][j] (不取第i个) + dp[i-1][j-1] (取第i个)dp[i][j]=dp[i−1][j](不取第i个)+dp[i−1][j−1](取第i个)如何去重呢?对于当前枚举的位置 iii , 若在iii前存在位置 kkk 使得 s[i]=s[k]s[i原创 2022-03-19 10:35:03 · 208 阅读 · 0 评论 -
daimayuan 每日一题 三进制循环(树形dp)
题目link思路考虑 dp[i][0/1]dp[i][0/1]dp[i][0/1] 表示以i结点为根的子树, 0 为向下递增的最大长度,1为向下递减的最大长度res=max(res,dp[i][0]+dp[i][1]−1)res = max(res,dp[i][0]+dp[i][1]-1)res=max(res,dp[i][0]+dp[i][1]−1)dfsdfsdfs 跑一边从下往上递归计算根节点即可code/* *@author:bzdhxs *@date:2022/03/1原创 2022-03-16 16:52:29 · 147 阅读 · 0 评论 -
D. Madoka and the Best School in Russia (dp?)
题目link思路问题可以理解为:用 x 的beautiful因子,能否找到不少于2种的方案使得 x=a1∗a2..∗anx = a_1*a_2..*a_nx=a1∗a2..∗an 成立,仅顺序不同为一种方案类似于完全背包求方案数,用 xxx 的 beautifulbeautifulbeautiful 因子为状态进行dp这里考虑到 xxx 的范围到达 1e91e91e9,用xxx的因子排序后的下标来映射因子后面均用的是下标来进行转移;如何转移呢?用xxx的beautifulbeautif原创 2022-03-16 01:30:19 · 416 阅读 · 0 评论 -
Weight the Tree(树形dp)
题目Link题目学习link1题目学习link2题目学习link3%%% 受益匪浅!--------------------------------通过了解题意可知当 n = 2 时 为一种特殊情况,特判一下(样例温和捏~当 n > 2 时 当一个节点为good节点时,与其相连的节点一定为非good点这样模型就显现出来了 类似于link2中所讲树的最小点覆盖问题这里用 0 表示 该点不是good点 , 1 表示为good点且只有 0-0 , 0- 1 两种情况,dp即可求出最原创 2022-03-16 01:05:52 · 266 阅读 · 0 评论 -
迁徙过程中的河流-线性dp
迁徙过程中的河流思路规定f[i]f[i]f[i]为前i个人已经过河,a[i],表示第i个人所用时间a[i],表示第i个人所用时间a[i],表示第i个人所用时间容易想到每次我们用时间消耗小的把船给开会去,这里先从小到大排序;题目举例中给了我们一种转移方式,利用f[i−2]f[i-2]f[i−2]进行转移,首先先让第一个人回去,时间消耗为a[1],再让第i-1,i个人开船去对岸时间消耗为a[i],再让第2个人开船回去接第一个人去对岸消耗为2*a[2],总消耗为 f[i−2]+a[1]+a[i]+a[2]原创 2022-01-23 00:54:59 · 122 阅读 · 0 评论 -
一类取数游戏-区间dp
知识点–区间dp特点:每次只能去左边或右边的值,给出求值公式求出极值。取数游戏思路:区间长度为1的区间dp,考虑到f[i][j]f[i][j]f[i][j] 为区间[i,j][i,j][i,j]的最大值;那么先手取左边或者右边就会给后手玩家两个状态 [i+1,j],[i,j−1][i+1,j],[i,j-1][i+1,j],[i,j−1],先手取得最大值,就要使后手取f[i+1,j],f[i,j−1]f[i+1,j],f[i,j-1]f[i+1,j],f[i,j−1]的最小值,那么状态转移方程为f原创 2022-01-23 00:44:53 · 73 阅读 · 0 评论 -
HDU - 2159 FATE(二位费用背包)
题目链接: URL题目大意: 就是一个完全背包,不过增加了一个限制就是可以取的总物品个数;如何考虑?增加一维费用,和完全背包处理相同;Code/* author:@bzdhxs date:2021// URL:*/#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<cstring>#include.原创 2022-01-22 22:44:52 · 53 阅读 · 0 评论 -
「牛客dp专题1」合并回文子串(字符串区间dp)
date:2022/1/12URL:https://ac.nowcoder.com/acm/contest/24213/1026前置知识DP求解最长回文子串思路为枚举字符串长度和子串初位置时间复杂度 O(n2n^2n2)状态转移方程:初始化边界为 dp[i][i]=1,dp[i][i+1]=(S[i]==S[i+1])?1:0dp[i][i]=1,dp[i][i+1]=(S[i]==S[i+1])?1:0dp[i][i]=1,dp[i][i+1]=(S[i]==S[i+1])?1:0 .原创 2022-01-12 20:08:35 · 212 阅读 · 0 评论 -
「牛客dp专题1」队伍配置
date:2022/1/12URL:https://ac.nowcoder.com/acm/contest/24213/1025题目描述n个物品 和 m 个装饰品,每个物品和装饰品有价值和体积,装饰品无法单独取,必须依附于物品,且物品最多取5个,物品和装饰品均只能取一次,一个物品最多装饰一个饰品,问不超过体积v,可获取的最大价值。思路一眼01背包,然后没思路题目限制比较多,这里我们考虑状态f[i][j][k]f[i][j][k]f[i][j][k] 表示考虑到体积不超过v时,取j件物品和k件.原创 2022-01-12 08:15:09 · 244 阅读 · 0 评论 -
又见01背包
题目出处题目描述: 01背包板子思路:如果dp 表示 体积为j的最大价值,发现体积最大1e91e91e9,存不下,那么我们可以转换思路dp[j]:表示价值为j下最小的体积,然后倒找第一个不超过W的价值;code/* author:@bzdhxs date:2022/1/1 URL:https://nyoj.online/problem/860*/#include<iostream>#include<cstdio>#include<c.原创 2022-01-03 11:23:02 · 53 阅读 · 0 评论 -
C. Dima and Salad
Codeforces Round #214 (Div. 2)题目大意给出n种物品,每个物品取一件,每种物品有价值 a 和 重量 b ,问在满足∑ai/∑bi=k\sum{a_i} / \sum{b_i} = k∑ai/∑bi=k 的前提下,最大价值是多少?思路通关观察可以发现:01背包(完求最优解+每个物品取一次可以想到 01背包,但是如何满足条件限制呢?这里我们把限制转化一下可以得到∑ai−k∗∑bi=0\sum{a_i} -k*\sum{b_i} = 0∑ai−k∗∑bi=0这.原创 2022-01-03 11:05:36 · 56 阅读 · 0 评论 -
D. Easy Problem
Educational Codeforces Round 57 (Rated for Div. 2)date:2021/11/22题目大意:现在有一个由小写字母组成的字符串,去掉这个字符串的第i个位置会有a[i]的代价,问去掉一些字符使得该字符串中不包含一个子序列为hard的最小代价和。参考思路:一眼dp(俺不会qwq感觉这个状态转移方程很巧妙考虑f[i][j]f[i][j]f[i][j],表示前i个字符,不存在 子序列 j当 j == 1 时 不存在 “h”j == 2 时,不存在 .原创 2021-11-22 21:34:30 · 59 阅读 · 0 评论 -
一本通---国王(状态压缩dp--棋盘类模板)
第一道状态压缩dp题个人理解关于状态压缩dp,也就是说把一个集合状态用一个整型的二进制数来表示试想一下如若表示一个集合内的所有状态情况那么就会开很多维度的数组,在空间和逻辑上都很难进行状态的转移;题目大意:在 n×n 的棋盘上放 k 个国王,国王可攻击相邻的 8 个格子,求使它们无法互相攻击的方案总数。国王攻击形式如下:问有多少摆放的方案;思路:这里考虑状态转移方程 f[i][k][j]f[i][k][j]f[i][k][j] 表示 已经放好了前 i 行和k个国王,第i行的状态为 j的原创 2021-11-19 01:03:27 · 306 阅读 · 0 评论 -
「状态压缩DP」
Update:2021/11/19注: xx(交题oj)---- 题目名称模板题:一本通-国王<棋盘类>acwing-蒙德里安的梦想<棋盘类>acwing- 炮兵阵地<棋盘类>…原创 2021-11-19 00:26:13 · 138 阅读 · 0 评论 -
C. Mortal Kombat Tower
Educational Codeforces Round 95 (Rated for Div. 2)date:2021/11/15题目大意:也就是说:两个人A,B从左到右轮流取数(A先取),每次每个人可以选择取1或 2个,问A 最少取到1的个数;思路:一眼dp不会写qwq怎么个dp思路?状态方程 f[i][2]f[i][2]f[i][2] i 表示取到第几个数,0 表示 A取,1表示 B取因为这题是问A取得最小值,并不考虑B的情况,那么用f[][1] 来去存储 0的值;转移方程:.原创 2021-11-15 10:41:30 · 298 阅读 · 0 评论 -
「动态规划」 状态机DP
状态机DP个人理解: 把一个问题可执行的动作看做一些列状态,每次 移动/动作 就是从一个状态到另一个状态的过程,在股票买卖的题目集中 存在两个状态: 持有股票 与 不持有股票, 可以执行 4 个动作 如下图:股票买卖在设置状态转移方程考虑到最多可交易的次数 f[i][j][k] 表示在考虑前 i 件股票,进行第j次交易,k = 1,为持有股票,0为未持有股票的最大收益;根据状态转移易得状态转移方程:a[]a[ ]a[] 股票价格随天数变化的值;f[i][j][1]=max(f[i−1][j][原创 2021-10-30 20:50:15 · 162 阅读 · 0 评论 -
最长上升子序列板子
Tameplate// dp o(n^2)// f[i]: 以a[i]结尾的最长上升子序列的长度;// 状态划分: 考虑前 j 个 字串 ( 1 <= j < i);for(int i = 1; i <= n;i++){ f[i] = 1; for(int j = 1; j < i;j++){ if(a[i] > a[j]) f[i] = max(f[i],f[j]+1); }}cout << *max_element(f+1,f+1+n)原创 2021-10-26 00:03:31 · 85 阅读 · 0 评论 -
第十二届蓝桥杯C/C++B组 G题 砝码称重(DP)
学习二进制枚举的意外收获 题目与 HDU5616 Jam’s balance 完全一致;能够过样例,所有数据不得而知,理论上应该np,待完善 to be continue…题面:【问题描述】你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1, W2, · · · , WN。请你计算一共可以称出多少种不同的重量?注意砝码可以放在天平两边【评测用例规模与约定】对于 50% 的评测用例,1 ≤ N ≤ 15。对于所有评测用例,1 ≤ N ≤ 100,N 个砝码总重不超过 100000.原创 2021-04-24 21:22:25 · 1053 阅读 · 0 评论