dp
文章平均质量分 52
ACkingdom
这个人很懒,什么都没有留下
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
洛谷-P1040 [NOIP2003 提高组] 加分二叉树(区间DP,二叉树,先序遍历)
题目链接题意:已知一个二叉树的中序遍历的结果是一个递增的排列,给你这些节点的权值,根节点的值等于两个子节点的乘积加上他本身的权值,如果子节点为空则视为1,求这个二叉树能达到的最大值以及在该结果下的先序遍历序列。思路:首先,我们需要知道,中序遍历的情况下,每一个节点的两边都会是它的子节点或者子节点的子节点等等,所以我们只需要用一个区间dp来维护每一个小的二叉树的最大值即可,状态转移方程为:dp[j][j+i-1] = dp[j][k-1]*dp[k+1][j+i-1]+dp[k][k];这里注意,原创 2021-04-21 00:17:46 · 293 阅读 · 0 评论 -
洛谷 P1048 采药(DP)
题目链接思路:基础01背包DP。代码:#include<bits/stdc++.h>#define int long long#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);const int N=6e6+10;const int M=2e4+5;const double eps=1e-8;const int mod=998244353;const int inf=0x7fffffff;cons原创 2020-08-04 21:37:43 · 307 阅读 · 0 评论 -
洛谷 P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles
题目链接思路:从上往下跑,用原数组直接dp记录到达该位置的最大值。代码:#include<bits/stdc++.h>#define int long long#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);const int N=1010;const int M=2e4+5;const double eps=1e-8;const int mod=1e9+7;const int inf=0x7ff原创 2020-08-04 01:00:33 · 207 阅读 · 0 评论 -
洛谷 P1802 5倍经验日(DP)
题目链接思路:当i>=use时,可以选择打败或者不打败,dp[i]=max(dp[i]+lose,dp[i-use]+win)。当i<use时,无法战胜对方。dp[i]+=lose。代码:#include<bits/stdc++.h>#define int long long#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);const int N=2e5+5;const int M=2e4+5原创 2020-08-04 00:54:32 · 217 阅读 · 0 评论 -
Codeforces Round #659 (Div. 2) B1. Koa and the Beach(DP)
题目链接思路:DP记录每秒的海域状态,看你能否到达对面。代码:#include<bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);const int N=1e2+5,M=2e4+5;const double eps=1e-8;const int mod=1e9+7;const int inf原创 2020-07-28 22:07:20 · 229 阅读 · 0 评论 -
Codeforces Round #658 (Div. 2) D. Unmerge(dp,01背包)
题目链接思路:将每个数和他之后的比他小的数都分为一组,对分好的组进行01背包,看能否将组的总和变为n。代码:#include<bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);const int N=1e5+7;const double eps=1e-8;const int mod=1e9+7原创 2020-07-22 22:29:46 · 158 阅读 · 0 评论 -
Codeforces D. Omkar and Circle(思维,dp)
题意:n个数字组成一个环,每次选择一个数字将其相邻的两个值赋给他,然后删除相邻的值,这样操作只剩一个值,求这个值的最大值。思路:利用三个循环来维护前缀和,分别利用b和c数组求得(不相邻的)前缀和及(不相邻的)后缀和。代码:#include <bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);ty原创 2020-07-14 21:36:03 · 232 阅读 · 0 评论 -
Codeforces Round #652 (Div. 2)-D. TediousLee(dp,思维)
题目链接题意:阅读理解,建议去这篇博客自己看,(感谢带佬博主%%%%)。—>翻译博客思路:根节点不取的情况下,取子节点为爪dp[i]=dp[i−1]+2∗dp[i−2]dp[i]=dp[i-1]+2dp[i-2]dp[i]=dp[i−1]+2∗dp[i−2]当子节点不能为爪的情况下,取根结点,此时 i整除3.dp[i]=dp[i−1]+2∗dp[i−2]+4dp[i]=dp[i-1]+2dp[i-2]+4dp[i]=dp[i−1]+2∗dp[i−2]+4代码:#include<原创 2020-07-11 22:52:46 · 224 阅读 · 0 评论 -
SCPC-普普通通的DP(字面意思)
题目链接题意:给你一个n*m的矩阵,你需要从左上角走到右下角,你每次只能向下或者向右走,并且不能走出矩阵之外。只要你走到终点之后,你就会获得奖励,奖励的金额为:所有经过的元素做“与”运算。算一算你能获得的最大奖励金额为多少。思路:位置越高对答案影响越大,所以我们从高位到低位开始跑,计算每一位是否能有数字跑到最后且不影响之前的位置,具体实现看代码注释。代码:#include<bits/stdc++.h>using namespace std;#define int long lon原创 2020-06-17 20:24:44 · 346 阅读 · 0 评论 -
洛谷-AT2827最长上升子序列(dp)
题目链接题意:给定一长度为n的数列,请在不改变原数列顺序的前提下,从中随机的取出一定数量的整数,并使这些整数构成单调上升序列。 输出这类单调上升序列的最大长度。数据范围:1<=n<=1000001<=n<=100000思路:dp代码:正常求LIS的方法应该下面这种:#include<bits/stdc++.h>using namespace std;#define int long long#define IOS ios::sync_with_st原创 2020-05-30 20:48:32 · 462 阅读 · 0 评论 -
Gym-102152-K. Subarrays OR(dp,异或,思维)
题目链接题意:给你一个数组,求这个数组的所有字段“|”的不同的值有多少个。思路:set去重,数据1e5,暴力跑n方肯定会t,所以我们过程中开一个set(应该算是dp)来记录之前“|”过的区间的值。代码:#include <bits/stdc++.h>using namespace std;const int inf=0x3f3f3f3f;const int N=2e5+7;#define IOS ios::sync_with_stdio(false);cin.tie(0);c原创 2020-05-09 01:56:23 · 270 阅读 · 0 评论
分享