
dp
IZUMIXINGI
这个作者很懒,什么都没留下…
展开
-
Codeforces Educational Round #66 (Rated for div.2) E. Minimal Segment Cover
最小区间覆盖,当只有一次询问时就是一个贪心问题,按左区间排序,每次选择左端点在已经覆盖的点 + 1中,右端点能覆盖的最远的点;当有m个询问时,考虑使用倍增的方式求解(类似于二分查找):dp[i][j]表示从位置i起,选择2j个区间能到达的最远位置如果在i这个位置取2j个能到>=r的地方,我们当然希望能找到一个小于等于2j个区间使得能够覆盖到r点,所以选取区间不断逼近r但不超过r,最后一次要检查一步能不能从当前l到r,故输出ans + 1#include<bits/stdc++.h>原创 2021-10-23 17:10:28 · 87 阅读 · 0 评论 -
codeforces round#748 div3 F. Red-Black Number
n,a,b <= 40 考虑4维dpdp[i][j][k][l]状态表示,数字取到第i位,红色取了l个且组成的数字%a == j,黑色去了(n-l)个且组成数字%b == k,这样一个方案是否可行转移就是对当前数字分别取红色和黑色:取红色的话:dp[i + 1][(j * 10 + x[i])%a][k][l + 1]方案将变得可行取黑色的话:dp[i + 1][j][(k * 10 + x[i])][l]方案将变得可行最后看dp[n][0][0][?]方案是否可行,选择差距最小的进行输出即原创 2021-10-15 18:05:04 · 159 阅读 · 0 评论 -
[2021-9-23]补题记录
Educational Codeforces Round 54 (Rated for Div. 2)E. Vasya and a Tree题目大意:给定一棵以1为根节点的树,每个节点值为0,给定若干修改,x,d,v,为x节点及其dist(x,y)<=d的子节点y,值加上v,最后输出各节点的值;解法:离线修改,使用树状数组在树上对深度进行差分,记得回溯时修改回来,避免这条子路径对另一条子路径产生影响。#include<bits/stdc++.h>#define pb push_bac原创 2021-09-23 16:23:47 · 121 阅读 · 0 评论 -
P1171 售货员的难题 货郎担问题 | Uva10817 校长的烦恼
#include<bits/stdc++.h>#define debug(x) cout<<#x<<" is "<<x<<endl using namespace std;const int N = 25;const int INF = 0x3f3f3f3f;int dist[N][N];int dp[N][1<<21];int main(){ int n; cin>>n; for(int i = 0;i原创 2020-11-10 11:39:55 · 203 阅读 · 0 评论 -
[DP]UVa 10003 Cutting Sticks
记忆化搜索#include<bits/stdc++.h>#define debug(x) cout<<#x<<" is "<<x<<endl#define fi first#define se second#define pb push_back#define mp make_pair#define DBG 0//const int N = 1e5 + 5;typedef long long ll;const int INF =原创 2020-10-30 15:33:13 · 107 阅读 · 0 评论 -
Uva1625 -Color Length(DP)
#include<bits/stdc++.h>#define debug(x) cout<<#x<<" is "<<x<<endl#define fi first#define se second#define pb push_back#define mp make_pair#define DBG 0const int N = 5000 + 5;typedef long long ll;const int INF = 0x3f3f原创 2020-10-29 19:50:45 · 106 阅读 · 0 评论 -
记忆化搜索求DAG最长路
经典问题:嵌套矩形问题#include<bits/stdc++.h>#define debug(x) cout<<#x<<" is "<<x<<endl#define fi first#define se second#define pb push_back#define mp make_pair#define DBG 0const int N = 1000 + 5;typedef long long ll;const int原创 2020-10-26 21:26:59 · 156 阅读 · 0 评论 -
codeforces round 627 div3 [树上dp]F. Maximum White Subtree
#include<iostream>#include<vector>#define pb push_back using namespace std;const int N = 2e5 + 5;vector<int> g[N];int dp[N],a[N];const int INF = 0x3f3f3f3f;int dfs(int u,int pre){ int ans = (a[u] == 1)?1 : -1; for(unsigned in.原创 2020-10-15 10:31:02 · 130 阅读 · 0 评论 -
codeforcs round 674[字符串dp]F. Number of Subsequences
题目大意:给定一个字符串包含a,b,c,??可以转变为a,b,c中的一个,问模1e9+7意义下子序列a,b,c的个数 input: 6 ac?b?c output: 24 input: 7 ??????? output: 2835abc序列个数可以与ab序列的个数相关,ab序列的个数又与包含a字符的字符串个数相关遍历字符串,若当前字符为c,对答案的贡献为前面ab序列的个数若当前字符为b,对ab序列的个数的贡献为前面a的个数若当前字符为a,记前面q的个数为qcnt原创 2020-10-06 20:58:17 · 114 阅读 · 0 评论 -
[POJ 1661]help jimmy
这题蠢就蠢在先更新dpl和dpr时先从左侧出发后从右侧出发导致更新时dp不一定是最优这组数据可以测出:160 822 302 50813 823 298813 823 293816 826 213816 826 178817 827 218813 823 148821 831 73814 824 248813 823 283815 825 158819 829 58814 824 13813 823 28819 829 233814 824 43773 783 293原创 2020-09-06 18:31:50 · 145 阅读 · 0 评论 -
题解 CF1409F 【Subsequences of Length Two】
dp[i][j][k]表示前i个字符修改j个包含k个s2[1]的最优个数,不修改s1[i + 1]时更新dp[i + 1][j][k + s1[i + 1] == s2[1]],修改时若更新为第一个更新dp[i + 1][j + 1][k + 1],否则更新dp[i + 1][j + 1][k + s2[1] == s2[2]]#include<bits/stdc++.h>#define pb push_back#define mp make_pair#define se second原创 2020-09-06 15:57:28 · 348 阅读 · 2 评论 -
[codeforces 1409]E. Two Platforms
题意:有两块长k的板子,可以在任意整数座标水平放置,问最多有多少小球的投影在板子上首先注意到所有小球只关系它的xx座标,与yy座标无关因为同样的xx座标,板子的yy座标肯定无穷小(能接住所有掉下来的小球)所以现在问题是两段长k的线段,最多能覆盖多少点?我们可以枚举第一块板子的起始点和终点,再求后缀最大的覆盖#include<bits/stdc++.h>#define pb push_back#define mp make_pair#define se second#defin原创 2020-09-06 10:48:35 · 174 阅读 · 0 评论 -
[POJ 3666] S - Making the Grade
首先对高度大小进行排序,d[i][j]表示第i个修改为第j大最少的消耗,dp[i][j] 由dp[i - 1][k] 更新,(1<=k<= j)代码如下:#include<iostream>#include<algorithm>#include<vector>#define debug(x) cout<<#x<<" is "<<x<<endl#define pb push_back using na原创 2020-09-04 20:10:28 · 141 阅读 · 0 评论 -
[POJ 3616 DP] Milking Time
dp[i] 表示到达time_i时获得的最大价值,dp[i] = max(dp[i - 1],dp[end_timej - start_timej] + valuej),因为还有个休息时间,每次挤奶会多占用rest_time,如果end_timej + rest_time > n,令其取n则可,这样原本的end_timej ~ n 这一段也不会用于挤其他奶牛。#include<iostream>#include<vector>#define debug(x) cout&l原创 2020-09-04 10:08:07 · 129 阅读 · 0 评论 -
[POJ 3186 | 区间DP]Treats for the Cows
dp[i][j]表示区间 i~区间 j 的最大value,区间长度为j - i + 1,转移方程即为:dp[i][j] = max(dp[i + 1][j] + v[i] * (n - i - j),dp[i][j - 1] + v[j] * (n - i - j))先更新短区间,则更新长区间时短区间已经被更新完毕,故dp[1][n]即为最终答案。#include<iostream>#include<vector>#define debug(x) cout<<#原创 2020-09-03 22:00:30 · 102 阅读 · 0 评论 -
[HDU 1160 DP|sort &LIS] J - FatMouse‘s Speed
这题坑点在于对于dp数组的初始化~,切记不能再犯同样的错误了!#include<bits/stdc++.h>#define debug(x) cout<<#x<<" is "<<x<<endl#define pb push_back#define se second#define fi first#define mp make_pairusing namespace std;const int N = 1e3 + 5;struct原创 2020-09-02 22:11:22 · 123 阅读 · 0 评论 -
[HDU 1176 DP] 免费馅饼
dp[i][j]代表i时刻j位置最多的馅饼数量初始时只有dp[1][4],dp[1][5],dp[1][6]有值,转移方程为:dp[i][j] = max(dp[i][j],dp[i - 1][j] + cnt[i][j]); if(j - 1 >= 0) dp[i][j] = max(dp[i][j],dp[i - 1][j - 1] + cnt[i][j]); if(j + 1 <= 10) dp[i][j] = max(dp[i][j],dp[i -原创 2020-09-02 18:41:45 · 127 阅读 · 0 评论 -
[HDU 1074|状态压缩DP]D - Doing Homework
拿到这题很容想到去暴力搜索,枚举所有路径去搜索。复杂度为O(n!)显然是不行的将第i个符串标记为整数数字的第i位,dp[i]表示选取当前字符串最小的花费,如computer为第0位,english为第1位,math为第2位,dp[5]表示dp[101B],即选取computer和math的最小花费,而dp[5]又是由dp[1]和dp[4]更新取最小而来的。这样更新的复杂度为状态数*枚举bit位 = 2^n * n#include<bits/stdc++.h>#define pb push_原创 2020-09-02 16:52:41 · 137 阅读 · 0 评论 -
[HDU 1069 DP]Monkey and Banana
方法1:dp[i][j]记为在第i层使用第j块block的最大高度。三重for循环:#include<bits/stdc++.h>#define pb push_backusing namespace std;const int N = 95;int n;typedef long long ll;struct block{ int x,y,h; block(int _x,int _y,int _h):x(_x),y(_y),h(_h){ } };vector<b原创 2020-09-02 11:07:05 · 90 阅读 · 0 评论 -
[动态规划]洛谷--P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles
题目链接题目地址C++ version#include<bits/stdc++.h>using namespace std;const int N = 1005;int a[N][N],n,dp[N][N],ans;int main(){ cin>>n; for(int i = 1;i <= n;i++){ for(int j = 1;j <= i;j++){ cin>>a[i][j]; dp[i][j] = a[i][j];原创 2020-07-06 19:22:15 · 246 阅读 · 0 评论