动态规划
ssl_yty
这个作者很懒,什么都没留下…
展开
-
【校内模拟】【状压DP】number
第一次听说变进制状压先统计每个数字出现过的次数然后用1~a[0]表示选了“0”的个数,一个“1”用a[0]+1,两个“1”用a[1]*2+1,以此类推然后用一个数组g统计每种状态选了多少个数字f[i][k]表示在i这种选法下,余数为k。...原创 2022-08-18 08:30:59 · 267 阅读 · 0 评论 -
【gmoj】【动态规划】投票
最后统计答案时,枚举前面选了i个,且有j个为好的。f[i][j]表示选了前i个,有j个为好的。g[i][j]表示选了后i个,有j个为好的。可以证明选的人一定是排序后两端的人。原创 2022-08-05 07:38:42 · 249 阅读 · 0 评论 -
【gmoj】【动态规划】超级教主
那肯定是上一次跳到的地方越矮越好(因为花费少,且这次获得的能量更多)可以发现f一定是单调不下降的(不然就跳不到n了)设f[i]为跳到i时,剩余的能量值。原创 2022-08-04 21:41:46 · 98 阅读 · 0 评论 -
【动态规划】美妙的歌声
设f[i][0/1]为唱到第i位,结尾为0/1(da为0,do为1)枚举上一段最后的位置,其答案*2的中间s个数次方的累加和为结果原创 2022-07-02 11:15:46 · 105 阅读 · 0 评论 -
【动态规划】书本整理
设f[i][j]为选到第i本书从中拿掉了j本(第i本选了)枚举上一次选的是第几本,然后加上其与第i本宽度的差,最小的即为f[i][j]的值因为f[i][j]第i本是选了的,所以统计答案时,因取f[n-i][k-i]的最小值(0...原创 2022-07-02 09:22:20 · 102 阅读 · 0 评论 -
【2017 特长生】【DP】 摆渡线路
一般来说,这种圆的题都要拆成串来做由题意得,没有交叉部分的线段,在圆中可以同时保留可以想到区间DP枚举区间长度,然后枚举中点以这个区间边界为端点的线段肯定是保留的,记得加上...原创 2022-06-12 15:02:37 · 74 阅读 · 0 评论 -
【2016 特长生】【DP】子串距离
两个字母匹配时,有两种情况:· 两个字母匹配· 其中一个与字母匹配设f[i][j]为a串的前i个字母与b串前j个字母的最小距离f[i][j]=min(min(f[i-1][j],f[i][j-1]),f[i-1][j-1+abs(s[i]-z[jj)原创 2022-06-11 21:14:11 · 89 阅读 · 0 评论 -
【2013特长生】【DP】数字编码
一开始木有解题思路,弃题从题目中我们得到每一段的贡献值为个数*最长二进制+12设f[i]为前i个数字的最小编码位数枚举j,j+1~i为新的一段编码f[i]=min(f[j]+(i-j)*max)最后记得+12原创 2022-06-11 21:06:24 · 63 阅读 · 0 评论 -
【洛谷 P1441】 【状压】 砝码称重
【洛谷 P1441】 【状压】 砝码称重题目解题思路用二进制表示选了哪些砝码用bitset统计有多少种质量可称量代码#include<iostream>#include<cstdio>#include<bitset> using namespace std;bitset<2001> s; //类似数组,但只能存0或1 int n,m,z,a[30],ans,w[3000100];int main(){ scanf("%d%d原创 2022-05-04 11:52:05 · 159 阅读 · 0 评论 -
【ssl 2570】 【树形DP】 【单调队列】 幸福的道路
【ssl 2570】 【树形DP】 【单调队列】 幸福的道路题目解题思路我没过。。。从2020到2022的悲剧,有人看出来的话踢踢我先用树形DP求出以每个点为起点的最长路径因为最大差值不能超过m用单调队列维护区间最小值和最大值如果超过了,就将日期早的往后代码#include<iostream>#include<cstdio>using namespace std;struct lzf{ int to,q,nxt;}f[2000010];struct原创 2022-01-13 20:28:24 · 881 阅读 · 0 评论 -
【ybtoj 高效进阶 5.1】【动态规划】求好感度
【ybtoj 高效进阶 5.1】【动态规划】求好感度题目解题思路直接用多重背包的话会TLE所以呢,将件数ai二进制分组 用0/1背包代码#include<iostream>#include<cstdio>using namespace std;long long n,m,ans,t,x,y,z,b[10001],u[10001],f[20010];int main(){ scanf("%lld%lld",&n,&m); for (int原创 2021-12-11 16:09:33 · 243 阅读 · 0 评论 -
【洛谷 P2602】【数位DP】 数字计数
【洛谷 P2602】【数位DP】 数字计数题目解题思路设f[i]为有i个数位时,每个数字出现多少次允许前导0存在得到推导式假设我们要知道1~ABCD中每个数字出现多少次首先每个数字都会出现A*f[3]次 以0 ~ A-1作为最高位接着0~A-1每个都会出现1000次 作为最高位嘛然后呢A会出现BCD+1次前导0记得删掉哦这个就可以看作一个小分治拆数字,每一位做一遍就可以求出来啦最后结果就是solve(b)-solve(a-1)代码#include<iostream&原创 2021-11-27 16:33:13 · 116 阅读 · 0 评论 -
【校内测 10.6】【动态规划】大哥扛纵连
【校内测 10.6】【动态规划】大哥扛纵连题目传送门解题思路首先很容易得出不可能选最高峰作为集合点(除非只有一座山)那么集合点要不在最高峰的左边要不在右边,可以得到最高峰的贡献设f[i][j]为i~j座山中集合的最小值得到f[i][j]=min(f[i][k-1]+(j-k+1)*a[k],f[k+1][j]+(k-i+1)*a[k]) (k是i~j中最高峰的编号)预处理出f数组然后O(1)查询代码#include<iostream>#include<cstdio原创 2021-10-07 16:33:57 · 63 阅读 · 0 评论 -
【jzoj】 【DP】牛棚
【jzoj】 【DP】牛棚题目解题思路首先两个点之间的间距可以是r也可以是r+1(按文中(s-1)/(n-1)求出来的值设f[i][j]为放置了i头牛,有j个r+1的间距,最小的移动步数假设已经放置了i-1头牛当前的位置是w=(j*(d+1))+((i-j-1)*d)+1,化简为(i-1)*d+j+1那么转移式为f[i][j]=min(f[i-1][j],f[i-1][j-1])+abs(w-a[i])代码#include<algorithm> #include<原创 2021-08-23 15:27:17 · 64 阅读 · 0 评论 -
【洛谷 P7296】 【状压DP】 Uddered but not Herd G
【洛谷 P7296】 【状压DP】 Uddered but not Herd G题目解题思路qwq数据范围才20,很明显是状压啦如果s[i]>=s[j]说明又多读一次了 s表示的是它在字母表中出现的位置先将字母离散化然后求出c[j][k] 指的是第k种字符出现在第j种字符后面的个数,k比j在字母表出现的更早,代表了要多读的次数枚举字母表当前的状态s枚举当前添加的字符j转移式为 代码#include<iostream>#include<cstring&g原创 2021-08-17 16:39:07 · 156 阅读 · 0 评论 -
【ybtoj 高效进阶 5.2】 【区间DP】 木板涂色
【ybtoj 高效进阶 5.2】 【区间DP】 木板涂色题目解题思路设f[l][r]为对区间[l…r]涂色的最小次数考虑对区间[l…r]涂色,如果s[l]!=s[r],把区间分为两份涂,累计次数如果s[l]==s[r],那么取min(f[l][r-1],f[l+1][r])因为颜色相同,所以相当于免费涂色代码#include<iostream>#include<cstring>#include<cstdio>using namespace st原创 2021-08-15 22:11:40 · 117 阅读 · 0 评论 -
【ybtoj 高效进阶 5.2】 【区间DP】 石子合并
【ybtoj 高效进阶 5.2】 【区间DP】 石子合并题目解题思路设f[l][r]为合并区间l~r的最小得分设h[l][r]为合并区间l~r的最大得分sum维护前缀和因为是一个环将序列倍长处理求一个区间l~r的得分枚举一个k(l<k<=r)作为断点f[l][r]=min(f[l][k-1]+f[k][r])+sum[r]-sum[l-1]h[l][r]=max(h[l][k-1]+h[k][r])+sum[r]-sum[l-1]注意要先做小区间代码#includ原创 2021-08-15 22:01:09 · 65 阅读 · 0 评论 -
【gmoj】【数位DP】 数字
【gmoj】【数位DP】 数字题目解题思路设f[i][j]为填到第i位和为j先处理出f数组最后的答案是*2是因为奇偶位的和一样或前后n位的和一样都可以当奇偶位的和一样且前后n位的和一样时说明前n位偶位的和与后n位奇位的和一样所以要减去代码#include<iostream>#include<cstdio>using namespace std;const int mo=999983;string s;long long n,len,f[101原创 2021-08-10 20:28:11 · 73 阅读 · 0 评论 -
【gomj】【DP】 小学生语文题
【gomj】【DP】 小学生语文题题目解题思路设f[i][j]为第一段的 i~n 能从第二段的 j~n 中匹配出来转移分为三种情况x[i]==y[j] 当前俩字符刚好一样,直接从[i+1][j+1]转移 已经一样 所以不需要操作x[i]能在y[j~n]中找到且没用过 从f[i+1][j]转移 能在之前的匹配段中找到 说明已经用过操作了当前字符不一样 且不能在之前的匹配段找到 说明 j 往前了仍未匹配到x[i] 进行操作 从f[i][j+1]+1转移设g[i][j][0/1]记录从原创 2021-07-22 09:40:59 · 74 阅读 · 0 评论 -
【gmoj】 【DP】 环中环(70)
【gmoj】 【DP】 环中环(70)题目解题思路看到环就先想怎么将ta断成链当ta是链时 能不能取和前面一个判断是否差为1即可而环还要判断一下头和尾的差 可以将它放到统计答案时判设f[i][j]以i为开头j为结尾的环的环,取了f[i][j]个数但是i这一维对后面并没有贡献 将它舍去因为第一重枚举的是开头,没必要记录就变成f[j]以j为结尾的环,取了f[j]个数状态转移 就是枚举一个k 看是否能接在它后面统计答案时 找一个在它前面 且与它差不为1的数个数相减 取最大值 找一个前原创 2021-07-21 21:01:37 · 69 阅读 · 0 评论 -
【gmoj】 【NOIP2013模拟11.7A组】 【DP】【数学】图书馆
【gmoj】 【NOIP2013模拟11.7A组】 【DP】【数学】图书馆题目解题思路雾~ 求分差是什么鬼由初二知识可得方差公式长这个亚子将方差先乘上n 化开 变成这样因为平均数等于ai的和/n 那么 ai的和=n*平均数最后再合并一下就变成了这个亚子s2=∑(a[i])2-(x)2设f[i][j][k]为走了i步到达第j个平台用了k的力气里面存的是(a[i])2代码#include<iostream>#include<cstring>#i原创 2021-07-21 10:26:54 · 69 阅读 · 0 评论 -
【gmoj】【洛谷 P1879的强化版】 玉米田 (加强版)
【gmoj】【洛谷 P1879的强化版】 玉米田 (加强版)题目解题思路简化版应该都做过吧简化版题解这道题很容易想到状压然后发现数组爆了+TLE在简化版时枚举每一行的状态并存下来其实没有必要当我们要填(i,j)时只有它本身能不能填,(i+j,j)(i , j-1) 这两个格的填法影响它那我们可以将状态的表示变成这个样子接着做的就是正常状压啦不用预处理出状态和不能填的 因为每一行都不一样 做时判断即可代码92 TLE可以开卡常 卡过去#include<iostr原创 2021-07-21 08:02:40 · 75 阅读 · 0 评论 -
【洛谷 P4284】【树形DP】【期望】 概率充电器
【洛谷 P4284】【树形DP】【期望】 概率充电器题目解题思路考试的时候就很懵样例都没推出来???我大概是脑子烧坏了直接求出开的概率还是很难想的可以想到求出关的概率然后用1-关的概率就是开的概率假设将图建出来长这个样子设 f[i] 是第i个节点不充电的概率 (其子树以及它自己转移过来的概率)考虑 j 这个节点能对 i 做出什么贡献既然要让 i 是关的 那么ta自己得是关的 边不能传电 或是 j 没有电边能传电那么式子就是f[i] = (1-p[i])(1 - h[i][原创 2021-07-19 20:46:40 · 75 阅读 · 0 评论 -
【gmoj】【NOIP2013模拟11.4A组】 【DP】 积木
【gmoj】【NOIP2013模拟11.4A组】 【DP】 积木解题思路考试的时候就很懵-1的积木高度有很多种啊好像模拟不出来事实上,确实如此-1的积木高度有很多种而每一高度都由它前一个+1,-1,或不变的方案和转移过来当然如果它为0,就不存在-1的情况,所以为0时要先处理代码#include<iostream>#include<cstdio>using namespace std;const long long int mo=1000000007;原创 2021-07-17 14:36:57 · 82 阅读 · 0 评论 -
【gmoj】 【DP】 【期望】 彩色圆环
【gmoj】 【DP】 【期望】 彩色圆环题目解题思路暴力必用dfs跑出各种状态再求美观值的期望能跑20分求一个环其实就是一个特殊的链尝试将它断开因为题目求的是一段一段的贡献将这条链变为一段一段来看同一段内颜色相同设f[i][f_len][l_len]表示的是当前段与第一段颜色相同的期望值而g[i][f_len][[l_len]则是不同颜色那么认为f_len是第一段的长度然后l_len是目前最后一段i是当前位置那么可以得出转移式然后我们发现其实可以去除l_len这原创 2021-07-15 19:03:47 · 149 阅读 · 1 评论 -
[gmoj] [NOIP2013模拟11.5B组] [动态规划] 最短路径
[gmoj] [NOIP2013模拟11.5B组] [动态规划] 最短路径题目解题思路考试时用dfs暴力求出去时经过的点取最优答案妥妥的超时,20分改正ing…代码20分#include<iostream>#include<cstdio>#include<cmath>using namespace std;struct lzf{ int x,y;}a[1020];double da=0x7fffffffffff,f[1020][1原创 2021-07-12 16:00:24 · 70 阅读 · 0 评论 -
【CSP-J 2020】【洛谷 P7047】 【DP】 方格取数 题解
【CSP-J 2020】【洛谷 P7047】 【DP】 方格取数 题解题目解题思路考场上一直狂敲记搜奈何我太菜了,木有成功据说记搜也能过但我改成了DP题目巨像以前做过的一道题不过是只能向下和向右加了一个能向上,就非常ws可以使用一下小学知识将其旋转90°你就会发现ta变成了能向左,向右,向下走0表示向右1表示向左那么转移方程就很好推f[i][j][0]意为第i行第j列从左边当前所能得到的最大值f[i][j][1]意为第i行第j列从右边当前所能得到的最大值当i!=1时原创 2020-11-27 18:34:40 · 312 阅读 · 4 评论 -
【10.28 校内普及组】【洛谷 P2340】【01背包】 SMRTFUN 题解
【10.28 校内普及组】【洛谷 P2340】【01背包】 SMRTFUN 题解题目洛谷 P2340解题思路每只牛只有选于不选两种可能很容易想到01背包可以把聪明值看作容量把有趣值看作价值因为可能出现负数所以加上一个常数减一个负数等于加tatata的相反数所以01背包不用倒着求代码#include<iostream>#include<cstring>#include<cstdio>#include<cmath>usin原创 2020-10-29 16:29:39 · 186 阅读 · 0 评论 -
【DP】游戏 题解
【DP】游戏 题解游戏题目小GGG正在玩一款游戏,游戏地图上有NNN个点(1到NNN编号),这些点之间有MMM条无向边(没有重边)。一次系统刷新会在某个时刻在某点刷新出一定数量的怪物,系统刷新出来的怪物只会存在1秒,下一秒就会消失。如果那个时刻小GGG正好在那个点,那么小GGG可以秒杀(秒杀所用时间忽略不计,下同)这个点上的所有怪物。另外,小GGG还有BBB次放大招的机会,每次放大招可以秒杀当前点及与其直接相邻的点上的所有怪物。大招有5秒的冷却时间,也就是说每次放大招后要经过555秒才能再次放大招(原创 2020-09-12 17:12:18 · 268 阅读 · 0 评论 -
【DP】序列 题解
【DP】序列 题解序列题目一个长度为kkk的整数序列bbb 1,bbb 2,…,bkbkbk(1≤bbb 1≤bbb 2≤…≤bkbkbk≤NNN)称为“好序列”当且仅当后一个数是前一个数的倍数,即bibibi+1是bibibi的倍数对任意的i(1≤iii≤kkk-1)成立。给定NNN和kkk,请算出有多少个长度为4、kkk的“好序列”,答案对1000000007取模。输入输入共1行,包含2个用空格隔开的整数NNN和kkk。输出输出共1行,包含一个整数,表示长度为kkk的“好序列”的个原创 2020-09-12 15:12:33 · 289 阅读 · 0 评论 -
洛谷 P1879 Corn Fields G 题解
洛谷 P1879 Corn Fields G 题解洛谷 P1879题目Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettably, some of the squar原创 2020-08-20 20:19:25 · 364 阅读 · 2 评论 -
洛谷 P1052 过河 题解
洛谷 P1052 过河 题解洛谷 P1052题目在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,…,LLL(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为LLL的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是SSS到TTT之间的任意正整数(包括SSS,TTT)。当青蛙跳到或跳过坐标为L的点时,就算青蛙已原创 2020-08-20 17:00:08 · 572 阅读 · 0 评论 -
洛谷 P2622 关灯问题 II 题解
洛谷 P2622 关灯问题 II 题解洛谷 P2622题目现有n盏灯,以及m个按钮。每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果。按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时候,把它关上,否则不管;如果为-1的话,如果这盏灯是关的,那么把它打开,否则也不管;如果是0,无论这灯是否开,都不管。现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按几下按钮才能全部关掉。输入前两行两个数,nnn mmm接下来mmm原创 2020-08-20 11:40:35 · 318 阅读 · 0 评论 -
洛谷 P1433 吃奶酪 题解
洛谷 P1433 吃奶酪 题解洛谷 P1433题目房间里放着 nnn 块奶酪。一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 (0,0) 点处。输入第一行有一个整数,表示奶酪的数量 nnn。第 2 到第 (nnn+111) 行,每行两个实数,第 (iii+1) 行的实数分别表示第 iii 块奶酪的横纵坐标 xixixi,yiyiyi。输出输出一行一个实数,表示要跑的最少距离,保留 2 位小数。样例input41 11 -1-1 1-1 -1output7.原创 2020-08-20 10:09:34 · 1403 阅读 · 0 评论 -
洛谷 P2704 炮兵阵地 题解
洛谷 P2704 炮兵阵地 题解洛谷 P2704题目司令部的将军们打算在NNNMMM的网格地图上部署他们的炮兵部队。一个NNNMMM的地图由NNN行MMM列组成,地图的每一格可能是山地(用“HHH” 表示),也可能是平原(用“PPP”表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示:如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。原创 2020-08-20 08:18:56 · 196 阅读 · 3 评论 -
车 II 题解
车 II 题解车 II题目有一个nnnmmm的棋盘(nnn、mmm≤80,nnnmmm≤80)要在棋盘上放kkk(kkk≤20)个棋子,使得任意两个棋子不相邻。求合法的方案总数。输入nnn,mmm,kkk输出方案总数样例input3 3 2output24解题思路先找出小的作为列再枚举出所有状态要对第一行赋初值第一重循环枚举行第二重循环枚举当前状态第三重循环枚举上一行状态第四重循环枚举士兵数代码#include<iostream>#inc原创 2020-08-20 07:42:29 · 305 阅读 · 0 评论 -
车 题解
车 题解车题目在nnn*nnn(nnn≤20)的方格棋盘上放置nnn个车(可以攻击所在行、列),有些格子不能放,求使它们不能互相攻击的方案总数。输入第一行为棋盘的大小nnn第二行为障碍的数量mmm第三行到第mmm+3为mmm个障碍输出总数样例input421 12 2output14解题思路状压DP用二进制表示某种状态在本题0表示可放,1表示不可放移位存储所有不可以放的位置枚举所有状态再枚举这个状态1在的位置判断是否能放能放就更新答案代码#原创 2020-08-19 16:52:53 · 329 阅读 · 0 评论 -
POJ 3378 Crazy Thairs 题解
POJ 3378 Crazy Thairs 题解POJ 3378题目These days, Sempr is crazed on one problem named Crazy Thair. Given N (1 ≤ N ≤ 50000) numbers, which are no more than 109, Crazy Thair is a group of 5 numbers {i, j, k, l, m} satisfying:1 ≤ i < j < k < l &l原创 2020-08-19 09:45:53 · 185 阅读 · 0 评论 -
技能树 题解
技能树 题解技能树题目玩过DiabloDiabloDiablo的人对技能树一定是很熟悉的。一颗技能树的每个结点都是一项技能,要学会这项技能则需要耗费一定的技能点数。只有学会了某一项技能以后,才能继续学习它的后继技能。每项技能又有着不同的级别,级别越高效果越好,而技能的升级也是需要 耗费技能点数的。 有个玩家积攒了一定的技能点数,他想尽可能地利用这些技能点数来达到最好的效果。因此他给所有的级别都打上了分,他认为效果越好的分数也越高。现在他要你帮忙寻找一个分配技能点数的方案,使得分数总和最高。输原创 2020-08-17 20:57:39 · 176 阅读 · 0 评论 -
洛谷 P2515 软件安装 题解
软件安装 题解洛谷 P2515题目现在我们的手头有NNN个软件,对于一个软件iii,它要占用WiWiWi的磁盘空间,它的价值为ViViVi。我们希望从中选择一些软件安装到一台磁盘容量为MMM计算机上,使得这些软件的价值尽可能大(即ViViVi的和最大)。但是现在有个问题:软件之间存在依赖关系,即软件iii只有在安装了软件jjj(包括软件j的直接或间接依赖)的情况下才能正确工作(软件iii依赖软件jjj)。幸运的是,一个软件最多依赖另外一个软件。如果一个软件不能正常工作,那么它能够发挥的作用为原创 2020-08-15 16:03:03 · 223 阅读 · 0 评论