动态规划
文章平均质量分 58
动态规划
Cosmic_Tree
什么时候才能像杨大佬一样强啊(´;︵;`)
展开
-
Gym - 103055J - Grammy and Jewelry ( dijkstra + 完全背包 )
题目链接:点击进入题目题意存在一个有 n 个顶点和 m 条边的连通无向图。顶点的索引范围为 1 到 n 。在顶点 i( 2 <= i <=n )中有无限的珠宝 ,每个都有价值的 ai 。从第 1 点开始。通过每一个边消耗1 个单位的时间。她可以在顶点 i 捡起一件珠宝,然后放回顶点 1 。捡起和放下一件珠宝可以立即完成。此外,她在任何时候最多可以携带 1 件珠宝。当她在顶点 1 放下一件价值为 x 的珠宝时,她得到了它的价值。现在,对于 1 和 T ( 包括 T )之间的每一个 k ,原创 2021-09-21 21:54:36 · 846 阅读 · 0 评论 -
CodeForces - 1561D2 Up the Strip ( dp + 前缀和 )
题目链接:点击进入题目题意思路与此题类似,但是 n 变为了4e6,O(nn)O(n\sqrt{n})O(nn) 不可过代码原创 2021-08-31 18:14:28 · 239 阅读 · 0 评论 -
CodeForces - 1560F2 Nearest Beautiful Number (hard version) ( 二分 + 数位dp )
题目链接:点击进入题目题意就是求 >= n 的数中,最小的,满足 k 美丽数的数。k 美丽数,是指数中不同的数字的数量 <= k思路一开始没想到数位,寄!数位dp的一次solve计算的结果通常以类似前缀和的结果返回 ( 就是返回 [ 1 , r ] 内满足条件的数的个数 )二分答案,考虑 solve ( mid ) - solve ( n - 1 ) 的值,这个值具有单调性(结合上面的结论,大概就知道,mid 越大,solve ( mid ) - solve ( n - 1原创 2021-08-19 11:01:34 · 258 阅读 · 0 评论 -
牛客2020年七夕节比赛 - F - 牛妹的考验( AC自动机 + dp )
题目链接:点击进入题目思路多串匹配,构建AC自动机,对于字符串权值的重复和包含的情况,可以在建 trie 树和求 fail 失配指针的时候进行处理,处理过后对于每个串,也就是每个对应节点,我们会得到它的权值 sum 。然后就是 dp [ i ] [ j ] ,代表长度为 j ,以 i 节点结束的字符串的最大权值。转移式:dp [ to ] [ i + 1 ] = max ( dp [ to ] [ i + 1 ] , dp [ j ] [ i ] + sum [ to ] ) ;( 当前原创 2021-08-08 17:15:14 · 149 阅读 · 0 评论 -
P1273 有线电视网 ( 树形dp -分组背包 )
题目链接:点击进入题目思路背包的总容量 = 该点子树中所有用户数量组数 = 该点的子节点数每组内的元素 = 该点子树中用户数的选择方案( 选 1 个用户、2 个用户、3 个用户… 个用户 )每组内元素相互冲突然后,模型就变成了分组背包同时因为要求的是费用不亏本的情况下( 也就是总费用 >= 0 )的最大用户数,所以最后倒着枚举用户数看哪个费用大于等于 0 即可代码// #pragma GCC optimize("Ofast","inline","-ffast-math")/原创 2021-08-07 21:28:03 · 167 阅读 · 0 评论 -
CodeForces - 1324F Maximum White Subtree ( 树形dp )
题目链接:点击进入题目题意一棵树,树中每个点是白色或者黑色,问对于每个点,在包含该点的连通块中白色点数量 - 黑色点数量 最大是多少思路dp [ i ] 为节点 i 所能获得的最大贡献,贡献分两部分,一部分由子树部分提供,另一部分由父节点部分提供。对于子树部分,一次dfs,求每个节点子树部分的贡献dp [ u ] += max ( 0 , dp [ v ] ) ;对于父节点部分,一次dfs,求父节点方向的贡献 ( 求父节点方向的贡献,因为是连通块,所以就相当于求 父节点子树的贡献 除原创 2021-08-04 10:25:44 · 184 阅读 · 0 评论 -
HDU - 2196 - Computer( 树形dp )
题目链接:点击进入题目题意对树上的每个点,求出离这个点最远的点的距离是多少思路对于一个节点,最远距离可能在该节点的子树方向上,也可能在该节点的父节点方向上,两次dfs,第一次求出该节点子树方向上最长距离,第二次求父节点方向上的最长距离,两次取最大值就是这个点的最大距离dp [ u ] [ 0 ] :在 u 的子树下离 u 的最远距离是多少dp [ u ] [ 1 ] :在 u 的子树下( 和 dp [ u ] [ 0 ] 不是同一孩子 )u 的次远距离是多少dp [ u ] [ 2 ]原创 2021-08-04 10:25:29 · 324 阅读 · 0 评论 -
2021牛客暑期多校训练营2 - G - League of Legends( dp + 单调队列 )
题目链接:点击进入题目题意n 个区间,分成 k 组,每组取相交的公共长度,使所有组的相交长度和最大思路将区间分成两部分:一部分是包含其它区间的大区间,对于这类区间,他既可以单独算作一组,其长度计入答案;又可以并入它所包含的那组,不影响答案。另一部分就是一些没有包含关系的区间。我们可以对这些区间进行排序 ( 左端点排序 ) ,然后进行 dp 。规定 dp [ i ] [ j ] 代表前 i 个区间分成 j 组的交和的最大长度。假设区间形式 ( lil_ili , rir_iri )d原创 2021-07-30 17:02:28 · 259 阅读 · 0 评论 -
CodeForces - 1509C - The Sports Festival( 区间dp )
题目链接:点击进入题目题意长度为 n 的数组 a [ i ] ,数组可以随意排序,求最小的 d [ 1 ] + … + d [ n ] 和d [ i ] = max ( a [ 1 ] , , , a [ i ] ) - min ( a [ 1 ] , , , a [ i ] ) ;思路区间 dpdp [ i ] [ j ] 表示区间 [ i , j ] 的最小 d 和区间 [ l , r ] 由区间 [ l + 1 , r ] 跟 [ l , r - 1 ] 转移来,额外增加的贡献原创 2021-07-28 17:01:15 · 398 阅读 · 0 评论 -
POJ - 1185 - 炮兵阵地( 状压dp )
题目链接:点击进入题目思路此题与前面的 Corn Fields 解法类似。炮车与炮车之间不能相邻,隔行也不能相邻,每个炮车能不能放只与上一行,上一行的上一行和当前这一行有关,所以,我们可以想到一行一行的递推,这是行与行之间,行内部之间也不能相邻,不能间隔相邻,这个,我们可以预处理出一行所有的可行的不相邻的状态( 最多 1<<m 种 ),三维dp,一维表示第几行,一维表示当前行内部的状态,一维表示上一行内部的状态,每行内部的状态可以用二进制来表示,对于上下之间的不相邻问题,可以通过三行原创 2021-07-28 17:00:46 · 185 阅读 · 0 评论 -
POJ - 3311- Hie with the Pie ( 状压dp )
题目链接:点击进入题目题意从 0 出发经过所有点最后再回到 0 点的最短距离( 可以多次经过同一个点 )思路dp [ i ] [ j ] 代表经过状态 i 里的点最后到 j 点经过的距离首先用 floyd 求每两个点间的最短距离,然后从 0 -( 1<<n ) 枚举每个状态,更新dp值如果这个状态只经过 j 这个点,那么 dp [ i ] [ j ] = dis [ 0 ] [ j ];(一开始就是从 0 出发)如果经过了多个点,可以通过枚举中间点,来更新 dp 值( 类似原创 2021-07-28 17:00:34 · 161 阅读 · 0 评论 -
POJ - 3254 - Corn Fields ( 状压dp )
题目链接:点击进入题目题意n * m 的土地,告诉你每个位置可以不可以种玉米,摆放奶牛需要放在可以种玉米的地方,同时奶牛不能相邻( 上下左右 ),问共有多少种摆放奶牛的方案思路牛与牛之间不能相邻,每只牛能不能放只与上一行和当前这一行有关,所以,我们可以想到一行一行的递推,这是行与行之间,行内部之间也不能相邻,这个,我们可以预处理出一行所有的可行的不相邻的状态( 最多 1<<m 种 ),二维dp,一维表示第几行,一维表示行内部的状态,每行内部的状态可以用二进制来表示( 因为 m 只原创 2021-07-28 17:00:19 · 118 阅读 · 0 评论 -
2021牛客暑期多校训练营4 - J - Average( 二分 + 最大连续字段和 )
题目链接:点击进入题目题意求矩阵的( 宽 >= x , 高 >= y 的平均值最大的 )子矩阵。思路要是看懂了上面的图片,就明白问题就转换成了分别求 a、b 数组的 有长度限制的( a 是不小于 x , b 是不小于 y ) 连续子序列的最大平均值。这个问题不懂的可以点点这里。代码//#pragma GCC optimize(3)//O3//#pragma GCC optimize(2)//O2#include<iostream>#include<st原创 2021-07-27 10:23:16 · 155 阅读 · 0 评论 -
POJ - 2018 - Best Cow Fences ( 浮点二分 + 最大连续子段和 )
题目链接:点击进入题目题意一个长度为 n 的数组,数组内都是正整数,求长度大于等于 f 的且平均值最大的连续子序列。思路二分平均值,对于每个二分得到的平均值,预处理一个辅助数组,存储 原数组减去平均值 的结果。为什么减去平均值?!减去平均值是为了更好的判断区间平均值与二分平均值的关系。例如,对于这个辅助数组,求长度不小于 f 的连续子序列,若是满足和 不小于 零,则代表了这段区间内的原数组的平均值 不小于 二分得到的平均值;否则小于。因此,我们对根据二分平均值得到的辅助数组,进行最大连原创 2021-07-27 10:10:37 · 217 阅读 · 0 评论 -
P3413 SAC#1 - 萌数 - ( 数位dp )
题目链接:点击进入题目思路因为 l , r 范围在 1e1000,用字符串处理一下,对于 l - 1 特殊处理 ( 字符串没法直接-1 )对于 dfs,state 状态设置为是否包含回文字串;dp [ i ] [ 0 ] 表示 i 位后,不存在回文子串的数量dp [ i ] [ 1 ] 表示 i 位后,存在回文子串的数量同时题目要求回文子串必须长度为 2 ,这里记录一个 gpre 参数表示前一位的前一位是什么,用来判断字符串的长度是否超过 1 。对于 state 状态的更新,考虑当前枚举位原创 2021-07-25 20:58:07 · 182 阅读 · 0 评论 -
P2602 [ZJOI2010]数字计数 -( 数位dp )
题目链接:点击进入题目思路state//当前 pos 位前有多少个位置上的数是 p因为要求 0 - 9 所有出现的次数,所以对 0 - 9 各求一次即可代码//#pragma GCC optimize(3)//O3//#pragma GCC optimize(2)//O2#include<iostream>#include<string>#include<map>#include<set>//#include<unordered原创 2021-07-25 20:57:57 · 131 阅读 · 0 评论 -
牛客练习赛83 - 计算几何( 数位dp )
题目链接点击进入题目思路state//表示前面有多个1代码//#pragma GCC optimize(3)//O3//#pragma GCC optimize(2)//O2#include<iostream>#include<string>#include<map>#include<set>//#include<unordered_map>#include<queue>#include<cstdio&原创 2021-07-24 21:32:21 · 163 阅读 · 0 评论 -
P6218 [USACO06NOV] Round Numbers S - ( 数位dp )
题目链接点击进入题目思路state//当前 0 的数目与 1 的数目的差值( 因为差值会出现负数所以加个偏移量 )代码//#pragma GCC optimize(3)//O3//#pragma GCC optimize(2)//O2#include<iostream>#include<string>#include<map>#include<set>//#include<unordered_map>#include<原创 2021-07-24 21:31:54 · 162 阅读 · 0 评论 -
P2657 [SCOI2009] windy 数 -( 数位dp )
题目链接:点击进入题目思路state//表示前一位的数(其实多余了,只不过懒得改了(ˉ▽ˉ;)…)题目要求相邻两个数绝对值要不小于 2 ,在枚举的时候判断一下当前一位跟前一位的关系即可,同时考虑到前导零,对于前面全是 0 的情况,前一位都置成 -2 即可( 目的是跟 0 绝对值不小于 2 )代码//#pragma GCC optimize(3)//O3//#pragma GCC optimize(2)//O2#include<iostream>#include<str原创 2021-07-24 21:31:44 · 114 阅读 · 0 评论 -
HDU - 2089 - 不要62 ( 数位dp )
题目链接:点击进入思路思路pos //第pos位pre//上一位值上的数state//前一位是否为6lead//是否前导零limit//是否是最高位要求没有62以及4,没有4的话,在枚举的时候判断一下,不枚举4就可以保证状态合法,而对于62的话,涉及到两位,当前一位是6或者不是6这两种情况计数是不相同的,要用状态来记录不同的方案数。代码//#pragma GCC optimize(3)//O3//#pragma GCC optimize(2)//O2#include<iost原创 2021-07-24 21:31:32 · 209 阅读 · 0 评论 -
2021牛客暑期多校训练营1 F - Find 3-friendly Integers -( 数位dp )
题目链接:点击进入题目题意如果一个自然数存在一个子串是 3 的倍数那它就是 3-friendly 的。多组数据,求 L~R 中 3-friendly 的数的个数。思路对于每一个位置pos,维护一个state状态,记录这个位置之前以pos-1为右边界的连续和%3的所有结果(0、1、2)(我用二进制记录状态,0代表这位没出过,1代表出现过,第一位对应%3=0,第二位对应%3=1,第三位对应%3=2)代码#include<iostream>#include<string>原创 2021-07-23 16:56:28 · 147 阅读 · 1 评论 -
cf - 1457C - Bouncing Ball - ( dp )
题目链接:点击进入题意给你一个长度为 n 的 01 序列,0 表示这个位置没有柱子,1 表示这个位置有柱子;再给你一个 p , k ,表示第一步走 p 个单位,以后每一步都走 k 个单位,落脚点必须是有柱子的地方;你可以花费 x 的代价给一个没有柱子的地方搭建柱子,或者花费 y 的代价将这个序列的首点删除(删除首点后,后面的下标整体-1),问走到终点的最小代价是多少思路dp [ i ] :表示从 i 开始每次移动 k 步,移动到终点所需要的最小代价考虑到可以删除序列的第一个点,我们可以枚举删除原创 2020-11-30 17:17:14 · 232 阅读 · 2 评论 -
qdu校内排位赛 - G 搞算法要以和为贵 -(dp)
题目描述:思路一开始想的是dp [ i ] [ j ] :前 i 个数替换 j 个数的式子之和但是看了看 n 到5000 , 内存限制32MB ,不大行就优化了一下dp [ i ] :n个数中替换了 i 个数的式子之和dp [ j ] 由 dp [ j ] 和 dp [ j - 1 ] 得到,对于位置 i ,我们有两种取法,一个是取 ci,另一个是取 bi,取 ci 由dp [ j ] * c [ i ] 得到;取 bi , 由 dp [ j - 1 ] * b [ i ] 得到;然后滚原创 2020-11-23 11:13:31 · 157 阅读 · 0 评论 -
Clock Master(分组背包)-2020ccpc(威海)
题意:T 组样例,每组给一个 n ,范围是 [ 1 , 30000 ] ,要求将 n 分解成: n = a1 + a2 + … + am ( m 没有限制 ),使得(a1 + a2 + … + am)的最小公倍数最大,输出这个最大值的对数。思路:将题目转换一下,就变成了将n分解,分解成使得尽可能的大。同时答案是要求输出这个最大值的对数,这个式子又转换为有 k 种(组)素数,每种(组)素数只能选择一个幂次( p ^ ( ei )) ,第i个数的容量是 p ^ ( ei ),价值是log (.原创 2020-11-01 18:22:23 · 555 阅读 · 1 评论 -
upc-Optimal Coin Change(完全背包+路径回溯记录)
题目描述In a 10-dollar shop, everything is worthy 10 dollars or less. In order to serve customers more effectively at the cashier, change needs to be provided in the minimum number of coins.In this problem, you are going to provide a given value of the chang原创 2020-10-04 20:47:30 · 356 阅读 · 0 评论 -
洛谷P1060 开心的金明(01背包)
题目描述:点击进入思路01背包,套板子代码#include<iostream>#include<string>#include<map>//#include<unordered_map>#include<queue>#include<cstdio>#include<vector>#include<cstring>#include<algorithm>#include<i原创 2020-10-04 18:46:51 · 215 阅读 · 0 评论 -
洛谷P1757 通天之分组背包
题目链接:点击进入思路分组背包,套板子代码#include<iostream>#include<string>#include<map>//#include<unordered_map>#include<queue>#include<cstdio>#include<vector>#include<cstring>#include<algorithm>#include<i原创 2020-10-04 18:37:29 · 247 阅读 · 0 评论 -
小梁的背包(01背包---一维数组)
时间限制:C/C++ 2秒,其他语言4秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld题目描述小梁来到了伽勒尔地区并参加了联盟赛热身赛,比赛小岛上有n个精灵散落在岛上各处,她有一个大小为s的背包,每个精灵的战斗值为vi,体积为wi。请问在她临走之前背包内宝可梦的战斗力总和最多为多少,并输出其战斗值总和sum以及背包内的精灵数量ans。输入描述:输入一个整数T(1≤T≤200)表示测试组数每组数据的第一行有两个整数 n,s(1≤n,s原创 2020-06-20 17:10:31 · 339 阅读 · 0 评论 -
CodeForces - 1437C Chef Monocarp(dp)
题目链接:点击进入题意:有 n 道菜,每个菜都有自己的最佳烹饪时间( t1 , t2 … tn),让你选 n 个出菜时间点( T1 , T2 … Tn ),使得 | Ti - ti | 的和最小(每个时间点只能出一道菜)思路:dp [ i ] [ j ] 代表前 i 道菜,都选择 j 以及之前的时间点出菜每个时间点都可以选择出菜或者不出菜若在 j 这个时间点选择出第 i 道菜dp [ i ] [ j ] = dp [ i - 1 ] [ j - 1 ] + abs ( j - t [ i ]原创 2020-11-01 18:42:14 · 328 阅读 · 0 评论 -
upc-Gold Mine(dp)
题目描述WNJXYK and DIDIDI are friends. They are thinking about how to make money all the time.One day, they go to a gold mine and want to dig some gold from it. But the gold mine they went is strange and it has some strict rules for people who wants to dig g原创 2020-10-07 12:42:10 · 337 阅读 · 2 评论 -
牛客-Arithmetic Progressions(dp优化)
题意给你 n 个数,让你从中找出最长的等差序列思路dp求最长等差数列的长度dp [ i ] [ j ] :以第 i 个数为倒数第二位,第 j 个数为倒数第一位的等差序列的长度;转移方程 dp [ i ] [ j ] = dp [ k ] [ i ] + 1;如果 n > = 2 , 那么等差序列最短长度也是 2 ,所以 dp 初始化可以初始化为 2 .代码#include<iostream>#include<string>#include<map&g.原创 2020-10-04 21:33:02 · 355 阅读 · 0 评论 -
upc-Final Standings(dp)
题目描述The GCPC 2019 is finally over. You have worked for five hours and have solved as many problems as possible. However, you still do not know which place you have got, since the scoreboard is still frozen. Of course you think that you and your team have原创 2020-09-29 12:10:40 · 252 阅读 · 0 评论 -
Parentheses Editor( 栈 + dp )
题目描述You are working with a strange text editor for texts consisting only of open and close parentheses. The editor accepts the following three keys as editing commands to modify the text kept in it.·‘(’ appends an open parenthesis (‘(’) to the end of the原创 2020-09-10 12:26:10 · 307 阅读 · 1 评论 -
Mountain Subsequences(dp问题)
题目描述Coco is a beautiful ACMer girl living in a very beautiful mountain. There are many trees and flowers on the mountain, and there are many animals and birds also. Coco like the mountain so much that she now name some letter sequences as Mountain Subsequ原创 2020-09-09 16:21:31 · 218 阅读 · 0 评论 -
The number of steps(概率dp问题)
题目描述Mary stands in a strange maze, the maze looks like a triangle(the first layer have one room,the second layer have two rooms,the third layer have three rooms …). Now she stands at the top point(the first layer), and the KEY of this maze is in the lowes原创 2020-09-09 11:06:46 · 684 阅读 · 4 评论 -
upc 无重力 (dancer)(dp)
题目描述「人类不会主动思考。」曾几何时,天上的神只有一位,然而这话并非出自她口。那么,这个判定,又是什么样的权威做出的呢?「『世界是什么时候开始变成这个样子的?几天前?几个月前?还是很多年以前?抑或原本就是如此,不曾改变?』若没有体验过物是人非,没有人会主动思考这样的问题,人类永远是只记得瞬间的孩子。早上起来第一眼看到什么样的世界,就会本能地认为之前数千年的时光都是这样过来的。只要忍耐或是麻木得足够长,足够久,再特别的记忆也会变成单纯的、无法体验的理论。」然而,依然有人记得,这段话,并非与世界的历原创 2020-07-03 13:54:43 · 288 阅读 · 0 评论 -
中石油 : 炸弹安放
时间限制: 1 Sec 内存限制: 128 MB题目描述 小蔡决定在小头家门口安放炸弹!!小头家门口有n个连续的格子排成一行,对于每个格子,小蔡可以决定放一颗炸弹或者不放。为了防止小头被炸死,小蔡不会在连续3个格子都放上炸弹。小蔡想知道一共有多少安放炸弹的方案(可以一个也不放)。由于方案数可能很多,所以你只需要方案个数mod 55555就可以了。...原创 2020-04-17 22:37:45 · 598 阅读 · 0 评论 -
百练-4141:砝码称重
总时间限制: 1000ms内存限制:65536kB描述设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),要求:计算用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况。输入一行,包括六个正整数a1,a2,a3,a4,a5,a6,表示1g砝码有a1个,2g砝码有a2个,……,20g砝码有a6个。相邻两个整数之间用单个空格隔开。输出以“Tot...原创 2020-04-10 22:32:48 · 944 阅读 · 0 评论