随笔分类 - dp每日一题
摘要:大意: 给出n个数,将这个数列修改为不增序列或者不减序列,需要的最小代价是多少(每次修改的代价为修改前后的差的绝对值) 思路: 贪心的想法是每次修改必然修改到原数列中存在的数,因为不这样修改必然会修改多了。 然后先考虑修改到不减序列,那么可以先将a数组排序,得到b数组,然后$dp[i][j]$代表将
阅读全文
摘要:POJ 3616 Milking Time 大意: m个牛需要挤奶,他们都有一个开始时间结束时间以及价值,对于每只牛,挤完奶需要休息k分钟,最后问能挤多少价值的奶。 思路: 排序后从左到右更新即可 #include <math.h> #include <stdio.h> #include <stri
阅读全文
摘要:HDU 2859 Phalanx 大意: 给出一个矩阵,要求输出最大的 延左下到右上的对角线对称的 矩阵大小 思路: $now[i][j]\(代表以\)(i,j)$为左上角的长度为k矩阵是否对称,那么它可以由$pre[i-1][j]$和$pre[i][j-1]$转移过来,$pre[i][j]\(代表
阅读全文
摘要:大意: 给出n个数,每次只能从剩下的数里面取第一个数或者最后一个数,价值是$a[i]*k$,k为第几次取,问最大价值和是多少 思路 区间dp,$dp[i][j]$代表从剩下第i个数和到第j个数时,能取到的最大值 #include <math.h> #include <stdio.h> #includ
阅读全文
摘要:POJ 1661 Help Jimmy 大意: 一个小球从$(x,y)$位置落下,下落速度恒定为1,当落到一个平台时可以向左也可以向右走,速度也是1,走到边缘时继续下落,每次下落距离不能超过k米,现在给出n个平台的左右边缘位置和高度,问小球最快多久能落到地面 思路: 首先将平台按照高度排一下序,然后
阅读全文
摘要:大意: n个候选人,从中选出m个人。 控方和辩方会根据对候选人的喜欢程度,给所有候选人打分,分值从0到20。选出的m个人,必须满足辩方总分和控方总分的差的绝对值最小。如果有多种选择方案的辩方总分和控方总分的之差的绝对值相同,那么选辩控双方总分之和最大的方案即可。 思路: $dp[i][k]$代表选了
阅读全文
摘要:大意: 给出n个老鼠的体重x和速度y,要求找出最多的一组老鼠,使他们严格符合体重上升,速度下降 思路: 先按照体重排一下序,然后求最长下降子序列即可,不过需要记录路径,开一个pre数组即可 #include <bits/stdc++.h> using namespace std; const int
阅读全文
摘要:HDU 1260 Tickets 大意: 给出n个人买票的时间以及他们每个人和下一个人合买双人票的时间,问最早什么时候能卖完票 思路: $dp[i]$代表前i个人买完票需要多久,那么可以从$dp[i-2]$转移过来,也可以从$dp[i-1]$转移过来 #include <bits/stdc++.h>
阅读全文
摘要:大意: 有n个馅饼在不同的时间会落到0到10的区间内,初始位置为5,每秒只能移动一米,问最多能接到多少馅饼 思路: 既可以正着写也可以反着写,正着写的话需要判断能否达到这个点,反着写就无所谓了 正着写: #include <bits/stdc++.h> using namespace std; co
阅读全文
摘要:大意: 给出储钱罐的罐重和总重,以及m种硬币的数量和面值,问符合条件(即硬币重量=总重-罐重)的硬币最小的面值和为多少 思路: 完全背包,容量为总重-罐重,价值为硬币的面值 #include <bits/stdc++.h> using namespace std; const int N = 1e4
阅读全文
摘要:大意: 求最大权值上升子序列 思路: 把最大上升子序列的板子改改就行,dp[i]代表以i为结尾的上升子序列的权值 #include <bits/stdc++.h> using namespace std; const int N = 1e6 + 5; typedef long long LL; in
阅读全文
摘要:大意: 给出n(\(n<=15\))个作业的用时和deadline,如果有作业超过deadline,那么每超过1天就要扣1分(超过多个作业也是1分),问扣分最少的方案,按字典序最小输出(题目保证输入按照字典序递增) 思路: 状压dp,枚举能转移过来的每个状态,更新dp数组即可 #include <b
阅读全文
摘要:大意: 给出n个种类的正方体,每种都有无穷多数量,现在要求搭建一个塔,从下到上用到的正方体是严格满足上面的边小于下面的边的,问最高能搭多高 思路: 首先需要将n个种类的正方体的六种摆放方式都存下来,然后$dp[i]$代表以第i个正方体为顶的塔的高度,那么$n^2$去枚举,符合严格小于的条件就更新即可
阅读全文
摘要:大意: 有n个程序员,每个程序员每写一行代码就会产生$a_i$行bug,每个程序员可以写任意多行代码(996石锤了),问写m行代码最多不超过b个bug的方案数有多少 思路: 完全背包问题,$dp[j][k]$代表写了j行代码正好产生k个bug的方案数,转移方程: \(dp[j][k]+=dp[j-1
阅读全文
摘要:大意: 给出一个长度为n的排好序的数组,要求选出一个子数组,每一对数都是整除关系,问该数组长度最大是多少 数据范围:$1\leq n\leq 1e6,1\leq a_i\leq 1e6$ 思路: 因为数据的长度和范围都是$1e^6$,所以可以想到开辟一个$pos$数组,存储$a_i$的位置,这样就可
阅读全文
摘要:大意: 从左上角移动到右下角,其中有k个黑块不能走,问方案数 思路: 从左上角到有下角,方案为$C_{n+m}^$,先将黑点从左上到右下排个序,$dp[i]$代表走到当前黑点的方案数,它可以根据左上方的$dp[i]$转移过来,\(dp[i]=C_{x_i+y_i}^{x_i}-\sum{dp[j]*
阅读全文

浙公网安备 33010602011771号