
dp
文章平均质量分 73
gg_gogoing
这个作者很懒,什么都没留下…
展开
-
ACM 中的期望,概率 问题
一个简易的入门:点击打开链接kuangbin的总结:点击打开链接我搞的题目:点击打开链接前段时间一直在做概率的题目。一、期望其中求解期望问题刚开始一直不理解。后来做得多了有感觉。例:(有放回)在5件产品有4件正品,1件次品,从中任取2件,记其中含正品的个数个数为随机变量ξ,则ξ的数学期望Eξ是 1.6在5件产品有4件正品,1件次品,从中任取2件,记其中含正品的个原创 2015-01-25 10:33:34 · 8444 阅读 · 2 评论 -
Best Sequence(poj 1699) 状压dp(TSP)
类似于前两天做的那个wordstack。状压的其实有时候爆搜+记忆化也差不多。就是这个是要与之前的都重合,移位预处理要注意。理解好第一个样例就行/* ***********************************************Author :bingoneCreated Time :2014/12/9 22:48:56File Name原创 2014-12-11 23:04:21 · 829 阅读 · 0 评论 -
数位dp专题 (HDU 4352 3652 3709 4507 CodeForces 55D POJ 3252)
数位dp核心在于状态描述,因为阶段很简单。一般都是求有多少个数,当然也有求平方的变态题。因为比这个数小的范围定然是从左至右开始小的,那么什么样的前缀对后面子数有相同的结果?HDU 3652题意:求能被13整除且含有13这样数的个数。赤裸裸的两个条件,加上个pre标明下前缀,其实直接开状态也是一样的。整除这个条件可以用余数来表示。余数转移:(mod*10+i)%13/* **原创 2014-12-28 10:07:24 · 902 阅读 · 0 评论 -
长吐一口气~树形DP汇总(POJ 2486 3659 2342 1947 1463 hdu 2412 )
终于在考试前刷完了树形dp专题。树形dp其实相比于其他更简单,因为树本身就是无后向性的数据结构。关键在于每个节点状态的设计。POJ 2486 Apple Tree这道题如果可以不走回头路那么非常简单,因此#include #include #include using namespace std;#define N 105#define K 205#define ma原创 2014-12-22 10:36:47 · 696 阅读 · 0 评论 -
证明 poj 1014 取模优化剪枝,部分递归 存在错误
做了这道题目,我才发现一道题即便可行,但是正确性也不一定。多数由于题目数据太弱。poj 1014 Dividing题目大意:有6堆石头,权重分别为1 2 3 4 5 6,要求输入 每堆个数 ,求是否可以平分石头使得两堆价值相同。网上对这道题的做法就两种,其中有错误的版本,却也可以AC。起初这让我等菜鸟感慨代码的简洁,但无法得出正确性的证明接下来就对两种方法的错误性进行证明。原创 2014-08-09 08:56:33 · 1598 阅读 · 1 评论 -
HDU 5001 Walk
这道题的精度卡的人难受死了。按照老师思路做的,矩阵的值表示i走到j的概率,求不经过某点的概率。起始位置每个点的概率是1/N,然后将那个点外出的边都去掉,矩阵N次后,即可得到走到该点的概率,1-P即可。注意:这道题有精度问题,可能会过小出现负数,1e-6在构图的时候为了避免每次N循环,可以将每条边的连接顺序放入容器vector中,.size()就都有了。#include #原创 2014-10-18 19:14:55 · 584 阅读 · 0 评论 -
HDU 5036 Explosion 2014 北京网络赛E题
点击打开链接概率题,这是我第二次接触概率题目。上次是另一个比赛中的walk貌似概率题经常考察。 题意:有N间房子,每个房子有一扇门,且其中会放有若干其他房间钥匙。此时若无法打开可以用炸弹炸开。求使用炸弹的期望。看到这个题目,若傻傻的用搜索就TLE。抽象思考下,打开特定一扇门,至多用一次炸弹。因此本题是求每个点用炸弹打开概率的和。对于每个点V,其打开概率就是1/S原创 2014-10-16 17:48:51 · 1034 阅读 · 0 评论 -
HDU 5135 Little Zu Chongzhi's Triangles(状态压缩dp+Vector)
这道题是水题,当时直接贪心就过了。多阶段决策,其实应该用dp,他人的代码使用Vector进行预处理。#include#include#include#include#includeusing namespace std;int n, a[12];double dp[1<<12];double cal(int a, int b, int c){ if(a+b<=c) ret原创 2014-12-08 22:00:23 · 542 阅读 · 0 评论 -
POJ 1948 (Triangular Pastures)二维背包 DP/DFS
题意:有N个木棒,全部使用使得原创 2014-11-06 21:50:18 · 595 阅读 · 0 评论 -
POJ 1185(状态压缩原来还可以这样)
吐槽一下,刚做完两个状压的题原创 2014-11-24 09:56:18 · 725 阅读 · 0 评论 -
POJ 3254 Corn Fields(状态压缩DP)
状态压缩DP,注意不能选的地方和不挨着对本行一个意思,本行自己选的是另一个意思。可相邻与范围限制不同。#include#include#include#include#include#include#include#define inf (1<<30)#define MOD 100000000using namespace std;typedef long原创 2014-11-23 22:19:04 · 610 阅读 · 0 评论 -
hdu 3001(状压dp+三进制)
不管是几进制,都用的是逻辑上概念,(上次六进制是用来转化多维数据)核心思路是TSP。这里的预处理比较巧妙,计算出了每种状态下各个位上的模vis[][]。TSP:dp[i][j] 在i状态下,以j结尾的最优解。两种转移都行:我为人人,人人为我。#include#include#include#include#define maxn 60000#define inf 0x3f原创 2014-11-27 17:44:00 · 731 阅读 · 0 评论 -
POJ 1160 (区间DP+四边形优化)
这个转移方程不好想,尤其是一段值的解是中间,不明觉厉。dp[i][j] 用i个邮局,覆盖前j个村庄的最小值。还有就是区间dp的平行四边形优化,这个题的转移方程并不是“区间DP”,所以枚举状态要逆着(很花时间),且用一个邮局覆盖都是从0断开了相当于没有断开。类比于石子归并,矩阵链乘等标准区间DP,其所需状态之前就已经获得,不用倒推#include #include #incl原创 2014-11-28 20:20:40 · 926 阅读 · 0 评论 -
概率DP求期望入门,HDU 4405,POj 2096,HDU 3853
这两个题目的状态一个是一维的,另一个是二维的。刚开始做的是POJ 2096,我将HDU状态定义为dp[i][j] 走i步到j位置。HDU是个判定问题,是否走完。而那个是走到特定的两个状态下。HDU 4405裸概率题,dp[i]状态定义为从i走完的期望。对于飞行路线用个map,若有则直接等于了。。#include #include #include #include #in原创 2014-11-24 18:50:03 · 1547 阅读 · 0 评论 -
HDU 3555 Bomb ,HDU 2089 深刻学习数位dp (各种方法乱用)
数位dp是与数位有关的区间统计 参考: 点击打开链接思想是将数字拆分,dp[i][j] 长度为i的数字有多少个满足j条件的,从000~999统计时,计当前数字为x,则其后面数字的变化的倍数是0~x-1 后面接000~999这样刚好统计不到这个数字n本身。eg:对于一个数,若其首位已经比询问上界小,则剩余位没有任何限制。此时如果能直接处理这一情况,则问题距离解决又会迈出一大步。原创 2014-12-26 09:14:16 · 734 阅读 · 0 评论 -
区间dp
题目连接:点击打开链接一般的dp就是寻找DAG图,区间dp的每步选择都是分成两边部分进行操作.共性特性(即一定要满足一个位置上要求)A. 求面积,从凸包中间枚举分割点B.脱衣服穿衣服,衣服脱了不能再穿,可以套上.若该区间没有和第一个一样的则dp[i][j]=dp[i-1][j]+1 反之为dp[i][j]=min(~,dp[i+1][k-1]+dp[k][j]) //因为i和k一样但要原创 2016-11-17 16:48:36 · 341 阅读 · 0 评论 -
CodeForces 13C && poj 3666 状态定义不同...
这个是因为状态定义不同产生的两种代码. 题意都是一样的,CF还简化了一种情况. 参考: poj3666 CF13 CF中定义: f[i][j] 表示将原始数列中的前 i 个数变成单调不降,第 i 个数最多为 B[j] 的最少操作次数 转移:f[i][j] = min(f[i][j-1],f[i-1][j]+abs(a[i]-b[j])) poj中定义: dp[i][j]表示:前i原创 2015-05-06 10:46:37 · 798 阅读 · 0 评论 -
Crossing River poj1700
过河问题 这个题目是之前微软的面试题,很经典. 问题难点在于还要把船送回来. 特殊点是起始和最后的,要考虑把所有人送过去,有一点就是最快的人送回来的速度最快,但同时发现如果最慢的两个人过去,节约了一个最慢的时间,但是送回来的时间却很长,这样就要最快的提前过去. 注意正确状态是所有人都到了对岸. PS: 考虑当前最慢的人,如果要把它送过去 1.可以利用最快的和它一起过去,最快的回来原创 2015-05-06 10:36:29 · 604 阅读 · 0 评论 -
POJ 1012 Joseph 变形约瑟夫环
子问题与原问题........题意:有k个坏人k个好人坐成一圈,前k个为好人(编号1~k),后k个为坏人(编号k+1~2k)现在有一个报数m,从编号为1的人开始报数,报到m的人就要自动死去。问当m为什么值时,可以使得在出现好人死亡之前,k个坏人先全部死掉?PS:当前一轮第m个人死去后,下一轮的编号为1的人 为 前一轮编号为m+1的人。 前一轮恰好是最后一个人死掉,则下一轮循环回到开原创 2014-11-10 09:41:12 · 978 阅读 · 0 评论 -
一些思维训练
题目:点击打开链接要多多关注序这个属性.1. 贪心算法,取满足条件下最合适的,排序+匹配即可.using namespace std;const int maxn=21000;const int INF=0x3f3f3f3f;int N,M,K,L;int h[maxn];int k[maxn];int main(){ while(~scanf("%d%d",&N原创 2015-04-29 10:14:08 · 727 阅读 · 0 评论 -
最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
http://www.cnblogs.com/zhangchaoyang/articles/2012070.html把一个问题转换为若干个规模更小的子问题,并且都借助于一个二维矩阵来实现计算。约定:字符串S去掉最后一个字符T后为S',T1和T2分别是S1和S2的最后一个字符。则dist(S1,S2)是下列4个值的最小者:1.dist(S1',S2')--原创 2015-04-26 08:57:11 · 737 阅读 · 0 评论 -
LCS LIS LCIS 字符串编辑距离 专题
题目地址原创 2014-11-02 08:00:38 · 1035 阅读 · 0 评论 -
BST最优二叉检索树(java版本)
这个内容是去年暑假讲的,但是一直没有实现,其实说白了就是区间dp,求一个序列构成二叉树,中序遍历有序.核心和其他区间dp一样,枚举中间值.然后枚举出来后再将整个区间的概率累加,因为相当于加深了一层.JAVA代码,附测试数据import java.util.Arrays;import java.util.Scanner;public class Main { /*原创 2015-04-10 10:09:37 · 1165 阅读 · 0 评论 -
背包问题(恰好背满 二维背包) 总结
关键字:学习DP,背包问题似乎是永远绕不过去的原创 2014-11-05 09:30:26 · 1438 阅读 · 0 评论 -
基础DP 19道
VJ链接:点击打开链接基础DP做好了更有益~!从中得出几个结论:1. 背包问题所选的物品是没有相关性,是填充性质2. LIS问题是元素之间有某种关系(多个属性则先排序某个,在依据另一个LIS)3. TSP组合问题,一般进行状压,求元素的某种序题目:1. 最大M子段和这个很像多维背包问题,有个数限制。同时我们可以发现最后这个元素只能是 i个子段中最后一个子段原创 2015-03-09 10:47:39 · 673 阅读 · 0 评论 -
HDU 5009 (dp+双向链表优化)
西安网络预赛题。连续选区间填充,完全覆盖。dp[i] 完全覆盖的最优解。连续一起的同种颜色缩并。优化:1. 至多每个单独选,价值最高为N2.不能连续选择超过sqrt(N)+1个不同的颜色3.第i种颜色来的时候,它之前本身的颜色不再考虑。PS:此题本来打算离散化数据,但是用map就不用了(直接判重)。对于有序的数据,离散化还要再映射#include #inclu原创 2014-12-05 08:34:37 · 906 阅读 · 0 评论 -
POJ 2817 WordStack(TSP)
隐藏的很深的TSP,题目根本没看懂。就是先算出每个字符串两两之间的最大匹配度(对应位置相同,字符串可移动)然后就是TSP,距离就是刚才算出的长度。#include#include#include#include#define maxn 60000#define inf 0x3f3f3f3fconst double eps=1e-8;using namespace原创 2014-11-28 17:42:25 · 580 阅读 · 0 评论 -
POJ 2411 Mondriaan's Dream(状态压缩+深搜)
每一行的填充仅与上一行有关系,每行的目的都是至少填充满上一行。当填充到i行的时候,i-1行某列没填充必须用竖直的方格填充,这是固定的,剩下其余的则搜索填充。用2进制的01表示不放还是放第i行只和i-1行有关枚举i-1行的每个状态,推出由此状态能达到的i行状态如果i-1行的出发状态某处未放,必然要在i行放一个竖的方块,所以我对上一行状态按位取反之后的状态就是放置了竖方块的状态。原创 2014-11-22 10:54:05 · 759 阅读 · 0 评论 -
HDU 3535 背包综合
题意:给3种背包,一种是至少装一个,一种是最多装一个,一种任意。首先要对一维状态的原始背包很熟悉才可以。此处的i代表滚动的背包类型。1. 任意的话就是01背包 初始化:dp[i][j]=dp[i-1][j]. dp[i][j]=max{dp[i][j] , dp[i][ j-w[i] ]+v[i] } dp[i][j-w[i]] 存在.2. 最多原创 2014-11-09 13:36:08 · 646 阅读 · 0 评论 -
HDU 2546 饭卡( 变形01背包)两种思路
中文题:给你n个菜的价格,原创 2014-11-08 18:34:48 · 682 阅读 · 0 评论 -
POJ 2184( Cow Exhibition ) 01背包 负值处理
题意:给定n头牛的聪明指数S和幸福指数F,如果存在S的和TS>=0与F的和TF>=0同时成立时,输出TS与TF的和的最大值sum,否则,输出0。这道题目原创 2014-11-06 23:28:37 · 536 阅读 · 0 评论 -
poj 2392 (Space Elevator) 1276 (Cash Machine)变形背包
这道题跟coins很像,看来楼教主的男人八题果然不简单。先按照可到达最高值按升序排序。完后进行coins式的背包处理就好了。#include#include#include#include#include#define max(a,b) ((a)>(b)?(a):(b))typedef long long ll;using namespace std;const i原创 2014-11-09 19:14:26 · 546 阅读 · 0 评论 -
HDU 2955 Robberies 0-1背包 浮点数处理
这道题是在不被抓的概率下获取钱最多原创 2014-11-06 23:43:59 · 827 阅读 · 0 评论 -
Greatest Common Increasing Subsequence poj 2127
明显的动态规划题目,糅合了LCS,LIS,构成了LCIS。原创 2014-09-10 17:05:56 · 504 阅读 · 0 评论 -
每日一dp(3)——POJ 1141 Brackets Sequence
/************************************************************************//* 区间动态规划问题一般都是考虑,对于每段区间,他们的最优值都是由几段更小区间的最优值得到,是分治思想的一种应用,将一个区间问题不断划分为更小的区间直至一个元素组成的区间,枚举他们的组合 ,求合并后的最优值。区间上dp,即把整个区间划分原创 2014-08-13 15:04:55 · 517 阅读 · 0 评论 -
每日一dp(2)——龟兔赛跑(hdu 2059)
比较经典的动态规划的题目了一般动态规划的想法都是先判断是否有最优子结构,无后效性。接着从状态转移入手,尽量细分状态(即给定N得到N+1),完了再递推计算难点:转移方程,其一般也难在如何描述一个结点有时候不太好做就结合使用记忆化搜索(从大到小搜索,因为多个小的可能会组成一个大的导致无效计算过多)/**************************************原创 2014-08-12 08:19:38 · 818 阅读 · 0 评论 -
线段树入门(poj 3274 3468 2528)
概念:在一类问题中,我们需要经常处理可以映射在一个坐标轴上的一些固定线段,例如说映射在OX轴上的线段。由于线段是可以互相覆盖的,有时需要动态地取线段的并,例如取得并区间的总长度,或者并区间的个数等等。一个线段是对应于一个区间的,因此线段树也可以叫做区间树。线段树常用于区间多次插入查询,经常改变数据。而线段树的核心在于如何设计一个节点的信息这里针对线段树的应用有三个方面:1.原创 2014-08-23 15:16:15 · 720 阅读 · 0 评论 -
POJ 1417 True Liars(并查集+DP)
大意:一个岛上有神与恶魔两个种族,神会说真话,恶魔会说假话。已知神与恶魔的个数,但不知道具体个人是属于哪个。n,x,y这个人问n次 ,x为神的个数,y为恶魔的个数。每次的问题为 xi,yi,a 问xi ,yi是否为神? a为yes/no。注意xi,yi可能为同一个人若最终可得出哪些是神则从小到大输出神的编号,并最终输出end否则输出no思路:经过简单推理原创 2014-08-22 12:37:15 · 2811 阅读 · 0 评论 -
每日一dp(1)——Largest Rectangle in a Histogram(poj 2559)使用单调队列优化
思路1.当前为n的面积如何与n-1相联系,dp[i][j]=max(dp[i-1][k]) , 0<k<=j描述:i为方块个数,j为高度但是此题目的数据对于高度太变态,h,1000000000 ,n,100000所以不可行(一般计算机为Ghz 相当于1S十几亿运算)思路2.此题目寻找的最大面积,对于一个方块来说则是以自己为中心左右两端比自己高的方块累计和与自己面积的乘积,取最大值。状态转移则可看作已知前面n-1个左边比自己高的的位置l[i],则如果该下标对应的数据比自己还高,继续往下找。利原创 2014-08-10 09:51:53 · 553 阅读 · 0 评论 -
单调队列 优化 min/max(dp)+g类型dp
单调队列是一种严格单调的队列,可以单调递增,也可以单调递减。队首位置保存的是最优解,第二个位置保存的是次优解,ect。。。 单调队列可以有两个操作:1、插入一个新的元素,该元素从队尾开始向队首进行搜索,找到合适的位置插入之,如果该位置原本有元素,则替换它。2、在过程中从队首删除不符合当前要求的元素。 单调队列实现起来可简单,可复杂。简单的一个数组,一个head,一个tail转载 2014-08-09 10:39:09 · 630 阅读 · 0 评论