
动态规划
文章平均质量分 74
各种dp
H-w-H
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
逆序对数列(简单dp)
P2513 [HAOI2009]逆序对数列题意:给出一个长度为nnn的排列,问有多少种排列方式的逆序对为k。思路:dp[i][j]dp[i][j]dp[i][j]表示长度为i的排列,逆序对为jjj的方案数。对于一个长度为iii的排列,将i+1i+1i+1插入到排列中有i+1i+1i+1种插入方法,最多能够多出iii个逆序对,所以可以得到转移方程dp[i][j]=∑k=0min(i−1,i(i−1)2)dp[i−1][j−k]dp[i][j]=\sum_{k=0}^{min(i-1, \fra原创 2021-09-13 19:00:31 · 359 阅读 · 0 评论 -
P1681 最大正方形II(简单dp)
P1681 最大正方形II题意给出一个n×mn\times mn×m的010101矩阵,问最大的01交错的正方形大小是多少。思路:dp[i][j]dp[i][j]dp[i][j]表示以(i,j)(i,j)(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)不相同时,(i,j)(i,j)(i,j)这个点才能向上左扩展。否则dp[i][j]=1dp[i][j]=1原创 2021-09-12 20:05:58 · 208 阅读 · 0 评论 -
P2359 三素数数(dp)
P2359 三素数数题意:如果一个数的所有连续三位数字都是大于100100100的素数,则该数称为三素数数。比如113797113797113797是一个666位的三素数数。给出一个nnn,问有多少长度为n的三素数数,对1e9+91e9+91e9+9取模。思路:dp[i][j][k]dp[i][j][k]dp[i][j][k]表示长度为iii的,倒数第二位是jjj,最后一位是kkk的方案数。这样我们dp[i][j][k]dp[i][j][k]dp[i][j][k]怎么从dp[i−1][k][原创 2021-09-07 21:43:22 · 369 阅读 · 0 评论 -
P2401 不等数列(dp)
P2401 不等数列题意:给出一个长度为nnn的排列,每种排列方式在两个数之间都能产生一个大于号小于号,问有k个小于号的排列方式有多少个思路:现在是长度问n−1n-1n−1的一个排列,我们把n插入到这个排列中就成了一个长度问n的排列。如果我们把nnn放在序列的最前面,就会多一个大于号。如果我们把nnn放在序列的最后面,就会多一个小于号。如果我们放在小于号的中间,我们就能减掉一个小于号,然后再加上一个大于号和一个小于号,也就是加上一个大于号如果我么放在大于号的中间,我们就能减掉一个小于号原创 2021-09-05 16:53:58 · 206 阅读 · 1 评论 -
P1622 释放囚犯(区间dp)
P1622释放囚犯题意:思路:CodeCodeCodeP1622释放囚犯题意:p个牢房,q个要释放的人,两个监狱能够通信当且仅当两个监狱之间都有人,当释放某个监狱的人时,和他能够通信的监狱必须要吃肉,问要按什么样的顺序释放才能让所有人吃上的肉最少思路:区间dp,反过来思考,释放人,我们考虑先把要放的人全部清空,然后再抓进去(可以想到,最优情况的顺序下,正向和反向的答案相同)这样一来,我们每次抓进去一个人,就合并两个区间,且加上区间人数。dp[i][j]dp[i][j]dp[i][j]表示把第.原创 2021-09-04 21:50:17 · 185 阅读 · 0 评论 -
E. Colorings and Dominoes(思维,dp)
E. Colorings and Dominoes题意:n×mn\times mn×m的棋盘,有黑白两种颜色的位置,我们能将白色的位置涂成红色或蓝色。我们要把多米诺牌放在这些位置上,每两个连续位置能放一个,水平放两个位置,这两个位置必须是红色,垂直放两个位置,这两个位置必须是蓝色的。定义在对每个白色位置涂色后,能最多放的多米诺牌的数量为这种情况下的价值。问在这2k2^k2k(k为白位置个数)种情况下价值总和是多少,对998244353 取模。如何确定对行进行贡献的统计和对列进行贡献的统计不会产生原创 2021-04-19 21:28:35 · 570 阅读 · 3 评论 -
D. Fox And Jumping(dp,裴蜀定理)
D. Fox And Jumping题意:在一个无限长的纸条上,给出n个卡片,每个卡片都有有两个属性l,c。我们可以花费c得到这个卡片,就能够用这张卡片来向左或者向右移动l的距离,问最小的代价使可以到达枝条上的全部点。思路:我们可以把纸条想象成坐标轴,起始位置为0,这样我们花费cic_ici得到卡片iii,就相当于能够写作0+∑i=1kxi×li(k未知,xi为一个常数)0+\sum_{i=1}^kx_i\times l_i(k未知,x_i为一个常数)0+∑i=1kxi×li(k未知,xi为一原创 2021-02-03 11:51:18 · 519 阅读 · 1 评论 -
郊区春游(状压dp)
郊区春游题意:给出nnn个地方,mmm条路,每条路都有一个权值vvv,RRR个想去的地方,问怎么安排行程使花费最少。思路:首先我们用Floyd(O(n3))Floyd(O(n^3))Floyd(O(n3))求每两个地方的最小花费。再因为RRR的取值范围是[2,15][2,15][2,15],我们可以用二进制位(0or1)(0or1)(0or1)来表示某个位置是否已经参观过,例如6=(0110)26=(0110)_26=(0110)2,就可以表示第1个和第2个地方我们已经参观过了。之后我们用dp原创 2020-08-17 22:08:11 · 232 阅读 · 0 评论 -
poj2441 Arrange the Bulls -- 状压dp
Arrange the Bulls dsfbfsdp问题:有n头牛,m个位置,每头牛都有1个或几个喜欢的位置,每个位置只能住一头牛。问:有多少种安排的方法能够使每头牛都住在自己喜欢的位置。我先用了dfs(TLE),又用了bfs(MLE),最后才用的是dp。dsfdfs版:每头牛有他自己喜欢的位置,从第一头牛开始遍历到最后一头牛,如果它喜欢的位置是空的我们就能将它放进去(vis[edge[i].to = 1),若已经有了牛在这个位置,我们就跳过它的这个喜欢的位置(注意要vis[edge[i].t原创 2020-06-13 21:54:25 · 206 阅读 · 0 评论 -
背包九讲(纯思路+模板)
背包九讲先循环物品,在循环体积,再循环决策。01背包完全背包多重背包(两种优化,只会一种)混合背包二维费用背包分组背包有依赖性的背包问题(1).01背包给n个物品,每个物品有价值Vi, 体积Wi。给一个背包,总容量m。问,背包可以装的最大价值(物品不可拆)#include<iostream>#include<cstdio>using na...原创 2020-04-11 21:41:25 · 334 阅读 · 0 评论