DP泛做
来源:互联网 发布:macbook 软件 安装 编辑:程序博客网 时间:2024/05/09 21:30
DP泛做
[CF455 A] Boredom
题目大意
题解
CODE
[CF629 D] Babaei and Birthday Cake
题目大意
题解
CODE
[CF631 E] Product Sum
题目大意
题解
[CF613 D] Kingdom and its Cities
题目大意
给定一棵树,多次给定一些关键点询问最少拆掉多少非关键点使得任意两关键点间不可到达
题解
建立虚树,树形DP自己YY一下就好啦
CODE
[BC75 C] King’s Order
题目大意
题解
CODE
[BC71 C] KK’s Number/[BZOJ2091] [Poi2010]The Minima Game
题目大意
题解
CODE
[BZOJ2302] [HAOI2011]Problem c
题目大意
题解
合法与人去坐的先后顺序无关
一开始交,组合数求错了…
CODE
[BZOJ3864] Hero meet devil
题目大意
题解
[BZOJ3233] [Ahoi2013]找硬币
题目大意
构造一个硬币序列\{a_i\}且a_1=1,a_i是a_j的整数倍,使得购买n种物品所需硬币数量最小(每个物品必须用刚好满足的钱数购买),询问最小数量
题解
性质:当我们知道最大面值的硬币了,我们就能知道这个序列的其他面值是最大面值的因子了,且购买物品时是贪心购买
dp[i]:用最大面值为i的硬币序列购买所有物品的最小硬币数
dp[i]=min\{dp[j]-\sum_k\frac{x[k]}{i}*(\frac{i}{j}-1)\}~~~~(j是i的因子)
若i/j不是质数,即=p_1*p_2,那么我们从面值为j*p_1那里转移是一定更优的,因为最大面值大了,且与j是倍数关系,一定包含j的硬币序列
dp[i]=min\{dp[i/j]-\sum_k\frac{x[k]}{i}*(j-1)\}~~~~(j\in prime)
CODE
[BZOJ4069] [Apio2015]巴厘岛的雕塑
题目大意
有那个点(有顺序),每个点有权值,要求分成m段(m\in[A,B]),使得每组权值和的or值最小
题解
因为是位运算,所以我们贪心从高到低来求答案
dp[i,j]:前i个分成j组且满足高位已经定下来的条件,这一位是否为0
因为or运算如果最后结果为0那么必须都为0所以比较好求
sum=sum[i]-sum[k]
dp[i,j]=\begin{cases}1&dp[k,j-1]=1且sum\&amp;(1<<(pos-1))=0且sum|ans=ans\\0\end{cases}
判断在[A,B]范围内是否满足条件即可
复杂度O(30*N^3)
对于最后一个subtask,A=1
dp[i]:前i个数,满足前面确定的条件下最少分多少组
sum=sum[j]-sum[i]
dp[i]=\min\{dp[j]+1\}~~~(sum\&amp;(1<<(pos-1))=0)且(sum|ans=ans)
CODE
[BZOJ4380] [POI2015]Myjnie
题目大意
有n家店,有m个人来购买物品,第i个人购买l[i]到r[i]的店铺中花费最小的l物品,若这个物品价值>val[i]则不进行购买
构造每家店的价格使得所有店的收益之和最大
有SPJ
题解
[BZOJ1026] [SCOI2009]windy数
题目大意
定义windy数为相邻两位的差都\ge 2的数
询问[A,B]内windy数数量
题解
数位DP
dp[i,j]:i位最高位为j的windy数个数
等价于求[1,A]的windy数个数
假设A的最高位为a_1,后面同理
首先是位数比A小的\sum_{i=1}^{len[a]-1}dp[i,j](1\le j\le9)肯定要计入答案
其次是位数于A相同,但最高位比a_1小的\sum_{i=1}^{a_1-1}dp[len[a],i]
最后是位数与A相同最高位与a_1相同,第二位比a_2小的且满足windy数的个数
\sum_{j=0}^{a_2-1}dp[len[a]-1,j](|a_1-j|\ge2)
也就是我们依次让后面那些位与A那一位的数相同
当|a_i-a_{i-1}|< 2时就停止继续将后面的计入答案了
最后注意一下,这种统计方法是无法将A本身计入的,所以我们最后答案是count[b+1]-count[a]
CODE
[BZOJ1833] [ZJOI2010]count 数字计数
题目大意
询问[A,B]的所有数中0~9各出现多少次
题解
dp[i,j,k]:表示有i位最高位为j,k出现了多少次
dp[i_1,i_2,i_3]=\sum_{i_4=0}^{9}dp[i_1-1,i_4,i_3]+10^{i_1-1}(i_3=i_2)
dp[i_1,i_2,i_3]=\sum_{i_4=0}^{9}dp[i_1-1,i_4,i_3]~~~~~~~~~~~~~~~(i_3\not=i_2)
统计[1,A]时,先ans[j]=\sum_{i=1}^{len[A]-1}\sum_{k=1}^{9}dp[i,k,j]
再ans[j]+=\sum_{i=1}^{a_1-1}dp[len[A],i,j]
最后ans[j]+=\sum_{k=1}^{len[A]-1}\sum_{i=0}^{a_k-1}dp[k,i,j]
并且ans[x[i]]+=A[i+1..len[A]]
最后不要输出空格…..
CODE
[BC66 C] GTW likes czf
题目大意
给定区间[L,R]和两个数G,T,从[L,R]和G,T中各自任取一个数A和B,得到C=A@B,询问有多少种C
定义@运算为A@B=((A\&amp;B)|B)^B)
题解
位运算的每一位都不干扰,所以一个数亦或任意数的值都是不同的
所以
我们认真讨论一下
CODE
[BZOJ3209] 花神的数论题
题目大意
题解
CODE
[BZOJ3329] Xorequ
题目大意
给定方程
题解
那么
第一问数位DP解决即可
第二问是斐波那契数列…矩阵搞之
CODE
[BC70 C]Jam’s maze
题目大意
给定一个正方形矩阵,每个点代表一个大写字母,从左上角走到右下角,且只能向下或向右走,询问走出的路径是回文的条数FFFF!
题解
但空间时间都承受不了,所以我们考虑优化无用状态
当我们知道走多少步之后,只需知道一个坐标值就可以知道另一个了,这样优化掉一维
走多少步那一维可以滚动数组优化掉
CODE
[BZOJ4011] [HNOI2015]落忆枫音
题目大意
题解
…
注意连边到根节点1的情况要特判一下
贴上求拓扑序的代码,好久不写手好生
procedure dfs(a,b:longint);var tt:longint;begin vis[a]:=1; tt:=w[a,2]; if (a=b) then tt:=0; while (tt<>0) do begin if (vis[w[tt,1]]=0) then dfs(w[tt,1],b); tt:=w[tt,2]; end; inc(len); x[len]:=a;end;
CODE
[BZOJ3727] PA2014 Final Zadanie
题目大意
题解
线性得到
貌似数学推导更多些,没有太强的树形DP的感觉
CODE
[BZOJ3257] 树的难题
题目大意
题解
CODE
[BZOJ1040] [ZJOI2008]骑士
题目大意
给定一个基环树林,每个点上有权值,要求选择一个权值和最大的点集,要求点集中的任意两个点之间不能直接相连
题解
拆环,讨论,树形DP
CODE
[BZOJ4033] [HAOI2015]T1
题目大意
题解
CODE
[BZOJ3829] [Poi2014]FarmCraft
题目大意
给定一棵树,从1号节点出发对树进行欧拉遍历,每到达一个点这个点就开始装MC,每个点装MC的时间不同,最后回到1号节点装MC,求所有人都能联机的最少时间
题解
[BZOJ3831] [Poi2014]Little Bird
题目大意
题解
CODE
- dp泛做1
- DP泛做
- USACO DP泛做
- 【DP】最近做的一些DP题
- 做过的dp汇总
- hdu1565 状压DP做的
- 做过的DP集合
- 留着以后慢慢做的期望DP/概率DP
- 也算是做了一些dp了
- 一些以前没做的简单DP
- [注意]未做的题(树型DP)
- 留着以后慢慢做的DP
- 做(do) (贪心模拟 dp)
- POJ3926 - 很少人做的单调队列优化DP..
- 这几天做的题,DP虽然可能较水
- DP 初学者必做经典题目 数塔
- 我做的第一道状态压缩dp。。。
- dp题目遗留暂且记录,以后再回来做
- uvalive 7480 Association for Control Over Minds
- Java设计原则和模式笔记
- JDBC
- iOS-3D touch相关开发
- 51nod动态规划入门--最长公共子序列
- DP泛做
- 阿里二面跪
- 三菱机器人中断简介
- 最大公约数与最小公倍数————多种方法
- 网络协议之DHCP request续约实现机制
- 贪心算法 水题 求中间数(problem Q)
- 通用的用户登录过滤器(SessionFilter)
- 工厂模式
- Java基础之内部类