dp
H_ang
记录一些东西吧!
展开
-
牛客OI周赛15-普及组 B 三角形+D 多元组 DP
B:#include <bits/stdc++.h>#define LL long longusing namespace std; int a[105][105];LL f[105][10005];int main(){ int n, k, m; scanf("%d%d", &n, &k); for(int i=1; i<=...原创 2020-04-07 14:58:24 · 212 阅读 · 0 评论 -
牛客练习赛60 C-操作集锦 长度为k的子序列个数(DP)
题目链接:https://ac.nowcoder.com/acm/contest/4853/C#include <bits/stdc++.h>using namespace std;#define LL long longconst int mod=1e9+7; char s[100005];LL f[1005][1005], g[30]={0};int main...原创 2020-03-28 00:14:52 · 893 阅读 · 0 评论 -
POJ 1390 Blocks - 颜色段消除的最大分数 三维DP
题目链接:http://poj.org/problem?id=1390&tdsourcetag=s_pctim_aiomsg题目大意:一个积木游戏,有连续的n个方块。相同颜色的方块连续方块可以消除。如果该段由k个积木组成。得分为k*k。我们首先把相同颜色的积木合并成一个块a[i],用b[i]表示a[i]有多少个积木。我们用dp[i][j][k]:表示段[i,j]并且j的右边有k个和a...原创 2020-03-11 22:27:21 · 299 阅读 · 0 评论 -
Codeforces Round 83 E. Array Shrinking DP-相同的元素可合并求剩余的最少元素
题目链接:https://codeforces.ml/contest/1312/problem/E题目大意:给你一个数组,两个相邻的相同元素X可以合并成一个元素X+1。可以无限次合并。问最后数组剩余的最少元素。我们用dp[i]表示前i个元素可以合并成的最小元素数量。考虑转移:如果a[1]−a[i]的某个后缀a[x]−a[i]可以合并成一个元素。那么就可以dp[i]=min(dp[i],dp...原创 2020-03-10 14:30:30 · 358 阅读 · 0 评论 -
Codeforces Round #622 (Div. 2) C2. Skyscrapers (hard version)-单调栈+dp
题目链接:https://codeforces.ml/contest/1313/problem/C2题目大意:有n栋房子。每个房子的最高的高度b[i]应该在[1, a[i]]区间里。现在要满足不存在i<j<k有a[i]>a[j]<a[k]。并且要b[i]的和最大。输出b[i]-b[n]。方案可能不唯一。随便输出一个就可以。思路:我们可以知道b[i]数组是一个单峰函数。...原创 2020-02-24 13:05:43 · 455 阅读 · 0 评论 -
2020牛客寒假算法基础集训营3 J-牛牛的宝可梦Go - floyd最短路+类LIS DP
题目链接:https://ac.nowcoder.com/acm/contest/3004/J题目大意:我们可以很容易得到一个K^2的算法。因为每个时间都不同。那么按时间排序。就是一个LIS。如果满足(j->i)时间差>=dis(i, j)那么就可以转移。f[i]:在捉完第i只宝可梦获得的最大战斗力f[i]:在捉完第i只宝可梦获得的最大战斗力f[i]:在捉完第i只宝可梦获得的...原创 2020-02-17 13:11:22 · 201 阅读 · 0 评论 -
Codeforces Round #360 (Div. 1) C. The Values You Can Make - dp 能组成一个数的集合的子集能组成其他的数
题目链接:http://codeforces.com/contest/687/problem/C题目大意:#include <bits/stdc++.h>#define LL long longusing namespace std;int c[505];int f[1500][1500];int main(){ int n, m; scanf("%d%d",...原创 2020-02-14 22:04:00 · 124 阅读 · 0 评论 -
Educational Codeforces Round 82 (Rated for Div. 2) - E. Erase Subsequences 一个字符串是否可以拆分成两个序列
题目链接:http://codeforces.com/contest/1303/problem/E题目大意:给你一个字符串S和一个字符串T。问能不能在S中找到一个子序列S1,然后从S中删除S1.再去删除后的字符串T中再找一个子序列S2。然后用S1+S2拼接成T。思路:我们枚举T的分割点。进行dp。dp[i][j]:表示前i个字符和t1匹配到第j个字符时。能和t2匹配的最大长度。如果dp[|...原创 2020-02-14 18:51:21 · 155 阅读 · 0 评论 -
Codeforces Round #450 (Div. 2) E. Maximum Questions - 两个条件的DP
题目链接:https://codeforces.com/contest/900/problem/E题目大意:给你一个n和长度为n的字符串。只包含a b ?。和一个t。问你最少改变最少的?。让n字符串中出现不重复长度为t。ababa…的个数最多。我们先考虑这么让前i个字符让t的个数f[i]达到最多。因为t在n出现一定是连续的。我们只要记录当前字符为a或者b连续a,b交替出来的字符串最长为多少...原创 2020-02-02 19:25:53 · 129 阅读 · 0 评论 -
Educational Codeforces Round 39 (Rated for Div. 2) D. Timetable - dp分组背包
题目链接:https://codeforces.com/problemset/problem/946/D题目大意:有n周,每周有m个小时。每节课1个小时。1代表有课。0代表没有课。现在可以逃k节课。每一天他都会从第一节课开始。到最后一课结束。问他现在可以逃k次课。让他在学校的时间最少。最小值为多少?思路:对于第i周。我们可以用v[i][j]表示:第i周逃j节课在学校的最小时间。因为要结果最小...原创 2020-02-02 16:10:00 · 146 阅读 · 0 评论 -
Codeforces Round #462 (Div. 1) A Twisty Movement -12序列的LIS
题目链接:https://codeforces.com/problemset/problem/933/A题目大意:在一个只包含 1,2 的序列中,翻转其中任意一个区间,求此时最大的 LIS 。一共有7种情况:3是1, 2全部翻转的特例。7是5, 6全部翻转的特例。2可以转化15可以转化6现在剩余:所以:先预处理前缀和后缀,然后再进行dpf[i][j][2]----表示从区...原创 2020-01-29 20:10:16 · 165 阅读 · 0 评论 -
Codeforces Round #139 (Div. 2) C. Barcode - 染色连续块dp
题目链接:https://codeforces.com/problemset/problem/225/C题目大意:您有一张n × m像素的图片。每个像素可以是白色或黑色。您的任务是更改尽可能少的像素颜色以获得条形码图片。如果满足以下条件,则图片为条形码:1.每列中的所有像素均具有相同的颜色。2.每条单色垂直线的宽度至少为x,最多为y个像素。换句话说,如果我们用相同的颜色对像素的所有相...原创 2020-01-29 14:47:34 · 128 阅读 · 0 评论 -
VK Cup 2012 Finals - E. IT Restaurants - 树子树+01背包
题目链接:https://codeforces.com/contest/212/problem/E题目大意:题目大意:给你一个无向树,现在用两种颜色去给这颗树上的节点染色。用(a,b)表示两种颜色分别染的节点数。满足以下条件:1.任何一种颜色至少使用一次,即a>=1&&b>=1。2.两种颜色染的节点不能相邻,即不能有边的两端染不同色。要你使a+b值最大下输出不同...原创 2020-01-29 13:45:00 · 204 阅读 · 0 评论 -
codeforces 173C. Spiral Maximum 子正方形螺旋线的最大值-dp滚动数组优化
题目链接:https://codeforces.com/problemset/problem/173/C题目大意:对一个边长k为奇数的正方形,有一条螺旋线(黑色)。现在给你一个长宽分别为n, m的矩阵。问你子正方形的螺旋线和的最大值。思路:我们枚举每一个子正方形。有O(n^3)个,如果我们能够在O(1)求出每一个子正方形的螺旋线和,就可以了。我们观察对一个正方形。内部是一个小的子正...原创 2020-01-17 16:35:01 · 178 阅读 · 0 评论 -
codeforces 182E. Wooden Fence 多阶段的匹配dp
题目链接:https://codeforces.com/problemset/problem/182/E题目大意:有n个木板,每种类型木板有一个长x和宽y,如果同一个类型木板旋转后长x和宽y和之前一样,那么只能算做一个木板,否则可以算做同类型的不同木板。现在商店每种类型的木板有无数种。如果要搭建长度为l的篱笆。问有多少种方案。必须满足:1.连续的两块木板类型不能相同2.除了第一块木板,后面...原创 2020-01-17 13:50:56 · 196 阅读 · 0 评论 -
codeforces 1288C 两个有约束数组的计数dp
题目链接https://codeforces.com/contest/1288/problem/C题目大意:有两个长度为m的数组a, b数组中的值都是1-n。问满足下面几个条件的数组(a,b)的个数为:1.两个数组的长度等于m2.每个数组的每个元素都是到1-n之间的整数3.对于任何索引1-n,有a[i]<=b[i]4.a数组以非降序排列;5.b数组以非升序排序。结果可...原创 2020-01-15 15:43:58 · 200 阅读 · 0 评论 -
codeforces C. Coloring Trees - 序列染色-指定颜色段的最小染料
有n棵树吗,m个染料。没有染色的树表原创 2020-01-08 18:48:56 · 261 阅读 · 0 评论 -
codeforces C. Garland 相邻奇偶不同的dp
题目链接:https://codeforces.com/contest/1287/problem/C题目大意:有一个序列是1-n的置换。有若干个数被拿走。用0表示,现在让你把这几个数放回去。如果相邻的两个数奇偶性不同,那么贡献+1.现在让你放回去要求贡献最小。思路:直接dp:dp[i][j][k][0/1]: 前i个数剩余j个奇数k个偶数,当前数为偶/奇时的最小贡献。因为j+k恒定,可以...原创 2020-01-06 22:20:01 · 385 阅读 · 0 评论 -
牛客小白月赛19 J-「火」皇家烈焰 与前后状态有关的四维dp的降维
题目链接:https://ac.nowcoder.com/acm/contest/2272/J题目大意:我的思路是用f[i][j][k][w]:表示前i个格子j:前一个格子有没有k:这个格子有没有w:下一个格子有没有的情况数。状态表示冗余了。我们用f[i][j][k]表示前i个格子j:这个格子有没有k:下一个格子有没有就可以了。#include <bits/stdc+...原创 2019-11-24 16:20:25 · 214 阅读 · 0 评论 -
codeforces. 756 B. Travel Card 多选择的dp+二分转移
题目链接:https://codeforces.com/problemset/problem/756/B题目大意:票价按以下方式构造。门票分为三种:一张单程票要花20卢布,一张90分钟的票需要50卢布,一天(1440分钟)的票需要花费120卢布。请注意,在时间t激活的x分钟的票证可用于从t到t + x -1(含)范围内的旅行。假设所有行程仅花费一分钟。为了简化乘客的选择,系统会...原创 2019-11-23 16:55:13 · 393 阅读 · 0 评论 -
codeforces 766 C. Mahmoud and a Message dp字符串的分割
题目链接:https://codeforces.com/contest/766/problem/C题目大意:给出一串有小写字母组成的长度为n的字符串。每个小写字母都有对应值ai,分割原串,要求对应值为ai的字符不能出现在长度超过ai的字串中。问共有多少种分割方式,分割后会出现的最长子串长度是多少,采用最少分割次数的方式,最少分割次数是多少?思路:f[i]:以第i个字符结尾的分割方案数。p[i]...原创 2019-11-23 16:49:26 · 153 阅读 · 0 评论 -
codeforces 1051 D. Bicolorings 两行的颜色块作为状态的计数dp
题目链接:https://codeforces.com/problemset/problem/1051/D题目大意:有两行格子长度为n,每个格子可以涂成白色或者黑色。如果两个格子颜色相同并且相邻那他们就属于同一个联通块。现在问你有多少中涂色方案使联通块=k。思路:第i行只与第i-1行的状态有关。用f[i][j][k]:表示第i行有j个联通块。最右端的状态为k的方案数,就直接dp就可以了。...原创 2019-11-21 20:51:08 · 145 阅读 · 0 评论 -
codeforces 1253 E - Antenna Coverage DP区间覆盖的最小扩展次数
题目链接:https://codeforces.com/contest/1253/my题目大意:m个天线,每个天线的位置是xi,分数是si,覆盖范围是[xi−si;xi+si],每个硬币可以使一个天线的si+1,求覆盖整个[1;m]的最少硬币思路:#include <bits/stdc++.h>using namespace std;const int N = 2001...原创 2019-11-17 19:43:09 · 308 阅读 · 3 评论 -
1256 E-Yet Another Division Into Teams 划分组-dp
题目链接:https://codeforces.com/contest/1256/problem/E题目大意:有n个人,每个人有一个能力,现在让你分组。每组至少3个人。团队的多样性是这个团队的:最大能力-最小能力。总的多样性:所有团队的多样性的和。让你分组:使总多样性最小。我们尽量让能力相近的人分到一组。我们先排个序,就会得到一个贪心的策略:每个组最多为连续的5个人。如果6个人,分成两...原创 2019-11-05 16:33:58 · 301 阅读 · 0 评论 -
codeforces 1221D - Make The Fence Great Again 左右格子高度不同的最小费用dp
题目链接:http://codeforces.com/problemset/problem/1221/D题目大意:q个询问。每次询问给你n个高度为a[i]的栅栏。升高第i个栅栏高度1将花费b[i]。现在要让所有的栅栏高度和相邻栅栏的高度都不同。问最小的费用是多少。思路:由题意可以知道:每个栅栏最多升高两次。那么用dp[i][j]表示第i个栅栏升高j米满足条件的最小费用。#include&l...原创 2019-10-24 17:54:31 · 253 阅读 · 0 评论 -
codeforces 339 C. Xenia and Weights 三维dp
题目链接:http://codeforces.com/contest/339/problem/C题目大意:在天平上放砝码你要在左边放一下然后到右边放一下一直重复这样放m次每次你放在其中一边都要让另外一边的重量比你少你可以用1~10中的某些砝码问你要怎样放才行,或者告知系统不能放m次思路:开始思路是dp[i][k]表示第i次放砝码k。左右的质量差。后来发现这个差有多个,我们不确定哪...原创 2019-10-24 12:00:06 · 156 阅读 · 0 评论 -
codeforces 919 D. Substring - 拓扑排序 + dp图上最长路
题目链接:http://codeforces.com/problemset/problem/919/D题目大意:给你一个n点m条边的有向图。每个点有一个字符。一条路的权值为这条路上所以字符出现次最大的那个字符的次数。可能有重边,有自环。可能不连通。求所有路的最大权值。如果可以为无穷大,输出-1。思路:先判断如果有环,输出-1。用拓扑排序就可以了。然后就是一个dp[i][j]表示到第i个节...原创 2019-10-23 17:04:19 · 173 阅读 · 0 评论 -
codeforces 913C. Party Lemonade 二进制记忆化搜索
题目链接:http://codeforces.com/contest/913/problem/C题目大意:有n瓶柠檬水。第i瓶的容量为2^(i-1)。价格为ai。问现在需要买容量>=L的柠檬水。问至少需要多少钱。思路:我们考虑把L拆成二进制。对于第5为1。那么买>=L的容量的水的最小价格为min(F[6], F[7], F[5]+L-(1<<5));预处理F[i...原创 2019-10-21 12:15:33 · 200 阅读 · 0 评论 -
CodeForces - 797E - 部分DP
题目链接:http://codeforces.com/problemset/problem/797/E题目大意:给你一个长度为n数组。给你q个询问。每次询问p, k;一次操作p=p+a[p]+k询问多少次操作后。p>n。思路:如果k比较大时:可以枚举。如果k比较小时:可以dp这个大小:sqrt(n)左右。#include <bits/stdc++.h>usin...原创 2019-10-18 22:09:34 · 124 阅读 · 0 评论 -
codeforces-41D dp
题目链接:http://codeforces.com/problemset/problem/41/D题目:给定nm 的矩阵 常数k下面一个nm的矩阵,每个位置由 0-9的一个整数表示问:从最后一行开始向上走到第一行使得路径上的和 % (k+1) == 0每个格子只能向↖或↗走一步求:最大的路径和最后一行的哪个位置作为起点从下到上的路径n, m<=100, k<=10...原创 2019-10-16 13:08:36 · 144 阅读 · 0 评论 -
dp专题+箱子堆积(最大递减序列变形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069题目大意:把给定的长方体(不限)叠加在一起,叠加的条件是,上面一个长方体的长和宽都比下面长方体的长和宽短;求这些长方体能叠加的最高的高度.(其中(3,2,1)可以摆放成(3,1,2)、(2,1,3)等).思路:把面积排序,求最长的单调递减序列(递减的条件:上面的长方体长宽都小于下面的长方体长宽...原创 2019-02-16 21:10:44 · 129 阅读 · 0 评论 -
dp专题+最大子矩阵
题目链接:http://poj.org/problem?id=1050题目大意:求一个最大为100*100矩阵中的子矩阵中元素之和的最大值。枚举此子矩阵是第i行到第j行。然后压成一维dp最大子段和。#include <iostream>#include <stdio.h>#include <string.h>#include <stack>...原创 2019-02-16 16:47:35 · 167 阅读 · 0 评论 -
dp专题 丢失阵列(组合数dp)
题目链接:http://codeforces.com/problemset/problem/1105/C题目大意:给你一个n, l, r; 让你构造阵列满足以下条件:阵列长度为n;阵列中所有的整数位于[l, r]之间这个阵列所有的整数和能被3整除让你求有多少个构造方案:结果mod 1e9+7。思路:首先把所有[l, r]区间内所有整数 mod 3=0, mod 3=1, mod ...原创 2019-01-23 16:42:43 · 162 阅读 · 0 评论 -
dp专题 字符串转化
题目链接:https://www.luogu.org/problemnew/show/P2758题目大意:设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:1、删除一个字符;2、插入一个字符;3、将一个字符改为另一个字符;!皆为小写字母!输入格式:第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于2000。输出格式:...原创 2019-01-25 16:32:45 · 260 阅读 · 0 评论 -
dp专题 可行方案总数:以01背包为例
我们在面对这个相同条件但所求结果不同的问题中设f[i][j]为前i件物品组合出来的容量为j的方案数(可以优化成一维)//无优化:#include<bits/stdc++.h>using namespace std;int a[105];int dp[100][100]={0};int main(){ int n, s; scanf("%d%d"...原创 2019-01-09 17:11:40 · 275 阅读 · 0 评论 -
dp专题 公平的坚果和字符串(类似跳台阶dp)
题目链接:http://codeforces.com/contest/1084/problem/C对于一个由小写拉丁字母组成的字符串s,坚果想找到严格增加的序列p1,p2,…,pk的数量,保证:对于每个i(1≤i≤k),spi =‘a’。对于每个i(1≤i<k),存在pi <j <pi + 1且sj ='b’的j。就是求严格增加的(下标序列)的个数,下标的字符全部是’a’...原创 2019-01-09 19:42:38 · 136 阅读 · 0 评论 -
dp专题 0-1背包输出具体的方案
0-1背包的状态转移方程:dp[i][j]=max(dp[i-1][j], dp[i-1][j-a[i]]+a[i]);如果一个物品被选中那么:dp[i][j]==dp[i-1][j-a[i]]+a[i]dp[i][ans-a[i]]+a[i]==ans//ans初始值:dp[n][s]表示背包里没有确定物品编号的总体积//所以可以输出选择物品的编号//但是编号是从大到小的//解...原创 2019-01-09 16:13:02 · 1776 阅读 · 0 评论 -
dp专题 神奇的口袋
有一个口袋容积为m,有n个物品,题目的体积为a1,a2,a3…an。把m装满有多少种不同的装法。递归:int dfs(int n, int m)/*从n个物品中选出总体积为m的选法*/{ if(m==0) return 1; if(n&amp;lt;=0) return 0; return dfs(n-1, m)+(m&amp;gt;=a[n]?df...原创 2019-01-07 20:56:06 · 1248 阅读 · 0 评论 -
dp专题 滑雪
求一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。最长的滑坡dp[i][j]表示从i,j出发的最长的滑坡递推的顺序:由高度从低到高,因为要知道dp[i][j],必须知道周围所有比自己矮的dp值。记忆化递归:可以不按从低到高的顺序直接递归。dp[i][j]由周围比自己矮的推导出来。人人为我:d[i][j]=max(dp[i-1][j]), dp[i+1][j...原创 2019-01-07 14:02:47 · 256 阅读 · 0 评论 -
dp专题 最佳加法表达式
在n个数字中插入m个加号使表达式的值最小num[i][j]:位置i到位置j的所表示的数字。递推:dp[m][n]表示在n个数字中插入m个加号所能形成的表达式最小值边界条件:dp[0][i]=num[1][i]递推公式:dp[i][j]=min(dp[i-1][k]+num[k+1][j])(i<=k<j) k:最后一个加号的位置,i<=k (i-1个加号至少要用i个数...原创 2019-01-06 21:27:24 · 218 阅读 · 0 评论