随笔分类 - dp
摘要:题目连接:https://www.acwing.com/problem/content/10/ 简单来说就是在子节点和父节点有制约条件下选择物品来取得最大值 其实可以这样想: 将子树按照体积划分为0~m份,每一份看作一个物品,就可以抽象思维为分组背包, 求f[u,j]的时候一共有三颗子树(上图),每
阅读全文
摘要:很典型的二维背包问题,但是有几个坑点需要注意,看,这就是踩坑的下场: 题目的大意是: 一个人打怪升级,他身上有耐力度和健康度,一旦健康度<=0就挂了,但耐力度不一样,只要耐力度在健康度的承受范围内: 举个例子,这个人打完怪耐力度是-3,但健康度是4,他就不会死,给点n个怪,杀死这些怪可以获得金币,问
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1387 有趣的dp思维题,可以一试; 题目思路: dp三步走,设状态,转移方程,dp结果 设dp[i][j]为以i,j为左下点的正方形的最长边长; 第二步转移方程: dp[i][j]=min(min(dp[i-1][j]
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1057; 蛮有意思的一道题; 题目大意是我们可以传球的时候可以向相邻的两个人传球,那么求在n个人m次传球的情况下最后回到传球人手里的方案数; 第一步: 我们可以这样设状态方程dp[i][j]表示传了i次回到第j个人手里的
阅读全文
摘要:题目链接:http://lx.lanqiao.cn/problem.page?gpid=T2893 0/1背包的变种题,dp思想的具体体现 我们可以用dp[i][j]来表示i个砝码能称j种重量,因为是进行个数统计,所以我们用逻辑(bool)数组来进行情况的判定,最后用ans进行统计后输出即可; 注意
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1441 其实这道题是一个很令人匪夷所思的题,它的做法是dp+dfs,这是令人意外的,也是我见识短的暴露; 我们采取的策略是在n个数字中删除m个数的方式,并且从第一个数一一枚举 通过dfs过程找到一种状态以后,求出使用当前
阅读全文
摘要:题目很眼花缭乱,其实是0/1背包变形式子,注意事项以及AC代码如下: 1 #pragma GCC optimize(2) 2 #include<bits/stdc++.h> 3 using namespace std; 4 int dp[1010][1010];//在ti最晚时间,能看m个节目的最大
阅读全文
摘要:简单dp 思路很清晰,注意事项及实现代码: 1 #pragma GCC optimize(2) 2 #include<bits/stdc++.h> 3 using namespace std; 4 int a[100010]; 5 int dp[100010]; 6 int ans=INT_MIN;
阅读全文
摘要:简单dp 分爬和跳两种状态考虑即可 注意事项及代码实现: 1 #include<bits/stdc++.h> 2 using namespace std; 3 int n; 4 int dp[10010][2];//0表示爬上去,1表示跳上去 ,dp表示当前楼层是爬上去的还是跳上去的 5 int a
阅读全文
摘要:混合背包顾名思义是讲0/1,多重和完全背包混合起来的背包问题,我们处理这种背包问题一般是进行条件判断处理然后在进行三个背包问题分析就可以了。 实战项目:https://www.acwing.com/problem/content/description/7/ https://www.luogu.co
阅读全文
摘要:根据这几天的学习情况,总结一下对于背包的理解和一些实现方式: 1.大名鼎鼎的0/1背包:这个就不多总结了 2.完全背包: 应该明白,通俗意义上完全背包指的是对于n个价值为v,重量为w的物品,每个物品可以无限次的取(而对于0/1来讲,则是只能取一次) 这怎么处理? 如果按照解01背包时的思路,令 f[
阅读全文
摘要:题目链接:https://www.lanqiao.cn/problems/553/learning/ 题目比较清晰,这里提供两种思路供于参考;; 先说第一种思路,dfs暴搜 爆搜就不用多说了,直接开搜 需要注意的是,按照题目要求只能一个方位最大只能走九个方位,然后按照题目的要求设计就行了 这个是演算
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1434 四联通问题和记忆化搜索的典型,如何会应用记忆化搜素呢? 在dfs每种情况是,可能这个点之前已经搜过了,没必要再去搜索了,因此不如存储记住,就没必要再去dfs了。 所以说,要进行dfs,就要定义方向,用一个dir[
阅读全文
摘要:Description 七七是一个炒股的爱好者,整日痴迷与炒股,但是由于七七数学不好,需要你帮助他算出炒股获得的最大利润是多少。现在给定一个长度为 N 的数组,数组中的第 i 个数字表示一个给定股票在第 i 天的价格。如果最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算七七所能获取
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1216; 有两种思路:递推和记忆化搜索。 先说递推: 我们采取从底到上的遍历思路,这样相比于从上往下更可节省时间,不至于造成TLE,所以dp【i】【j】就表示第i层第j个数开始往下走的数字和。 具体代码如下: #incl
阅读全文
摘要:最长递增子序列,举一个例子: A={5,6,7,4,2,8,3},它的最长递增子序列是5,6,7,8. 转载一下大佬写的吧,大佬写的真的好,好好学习一下,认真体会:https://blog.csdn.net/ltrbless/article/details/81318935 真题实战:http://
阅读全文
摘要:lcs——最长公共子序列问题 题目链接:http://lx.lanqiao.cn/problem.page?gpid=T2428; 思路:画图,比如我们输入abcdef,abcdef,可以画下图: 我们可以得出下列结论: dp[i][j]={ dp[i-1][j-1]+1 最后一个字母x序列与y序列
阅读全文
摘要:蓝桥杯:http://lx.lanqiao.cn/problem.page?gpid=T287; 经典之中的经典,最基础的背包问题。 思路:用dp[i][j]表示当背包容量为j的时候装前i个物品所获得的最大价值价值,然后用前面我的dp引入去画图表示就好了; AC代码如下(我连注释都懒得写了,这个题完
阅读全文
摘要:1.最少硬币问题大体题意: 有n种硬币,面值分别是v1,v2......vn,数量无限,输入一个非负整数s,选用硬币使其和为s,要求输出最少的硬币组合。 我们可以这样分析: 定义一个名为Min[s]的数组来表示是金额s所对应的最少硬币的组合,所以对我们来说,只要是在程序中查到Min[i]的大小就可以
阅读全文