![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
文章平均质量分 76
qq172108805
这个作者很懒,什么都没留下…
展开
-
hdu 1081 To The Max最大连续子串和
/* 一维的情况很简单,如何把一维的情况转化为二维情况呢? 例如,对于本题的测试数据: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 我们可以每次任选几行,压缩成一行,这样就转化为了一维情况。 例如,我们求1-2行中的最大子矩阵:即矩阵高为2(1-2行),宽为4的矩阵,可以先把1-2行相加,得到9 0 -13 2, 再求这个原创 2011-08-03 09:59:41 · 863 阅读 · 0 评论 -
hdu 4612 Warm up - 双连通 + 树形DP
/*hdu 4612 Warm up - 双连通 + 树形DP题意很简单通过双连通缩图,构成一棵树,然后求最长链,连接首尾即可。剩下的连通块就是所求*/#pragma comment(linker,"/STACK:102400000,102400000")#include #include const int N=200000+10,M=1000000+10;int原创 2013-07-28 10:27:21 · 959 阅读 · 0 评论 -
hdu 1864 最大报销额 0-1背包
/*hdu 1864 最大报销额题意:每张发票总额不得超过1000,单项物品不得超过600(一项物品可能出现多次),除ABC类外,其他的不能报销(含多余项的发票整个儿不能报销)所有价格扩大100倍,按发票经行背包*/#include#includeint dp[3000000];int wu[100],wug;int zong;int find(){ int n,i,a,b原创 2013-03-23 16:42:54 · 947 阅读 · 0 评论 -
hdu 2844 Coins - 多重背包
/*问一些硬币能组合到的钱数有多少种?多重背包 容量等于价值的算一种*/#include#includestruct node{ int w,v,c;}wu[150];int n,m;int dp[101000];void cpack(int c,int ww,int*d,int w) { int j; for(j=c;j<=w;j++)原创 2013-04-01 13:46:49 · 833 阅读 · 0 评论 -
hdu 2955 Robberies--01背包
/*题目大意:有一个小偷要偷银行的钱,可是他偷没家银行总是有一定的概率被抓,现在给了你一个概率P,只要他被抓的概率乘积不大与P,他就是安全的。 问你在他安全的情况下,他最多可以偷多少钱。做这道题是,错误的认为题目所给的浮点型的数据都是精确到小数点后两位,然后把概率放大100倍,转换成为熟悉的01背包。。faint。。经测试题目的数据可能达到0.00001,甚至比0.00001还小,,所以原创 2012-11-02 18:01:06 · 773 阅读 · 0 评论 -
poj 1837 Balance--01背包
// 01背包//参考http://blog.csdn.net/lyy289065406/article/details/6648094//基本就是抄过来了 呵呵 学习学习#includeusing namespace std;int shu[21][15001];int main(){ int a,b,i,w[21],z[21],j,k; cin>>a>>b; fo原创 2012-07-03 19:43:26 · 377 阅读 · 0 评论 -
hdu 1025 Constructing Roads In JGShining's Kingdom--最长上升子串(时间优化)
/* 本题也是最长上升子序列 同以往不一样的是,需要在时间上做优化 以往是开一数组,假设为f[i]表示到i能修多少路 到计算f[q]时,需要遍历q之前的,找到a[i]<a[q](a[]存数据)且f[]最大的,然后加1,就是f[q],这样太浪费时间 一种优化是把f[]相同的合并 于是,像本题,用dp[i]存长度为i的最小的数据,如本题存修i条路时,号码最小的富裕城市 到计算dp[q]时原创 2011-08-02 16:06:53 · 616 阅读 · 0 评论 -
hdu 1421 搬寝室--类背包问题
/* 可以说是背包问题吧:背包容量为k组,从n个中挑k组 因为要平方差最小的,故配组的时候一定是相邻的两个,共有n-1组,求出每组的平方差 所求就变成了从n-1个数中跳k个和最小的(好像挺简单,但是不能把同一个物品搬两次吧, 求相邻的两个数的平方差的时候,除了头尾,其余物品都算了两次) 所以用动态规划*/#include#includeusing namespace std;#原创 2011-08-04 17:07:00 · 610 阅读 · 0 评论 -
poj 1160 Post Office--DP--类背包问题
/*经典DP也可以说是背包问题:每个邮局占据一些村庄,求恰好占据完这些村庄时,距离的最小值(没有使用的那段代码可以这么理解)1、考虑在V个村庄中只建立【一个】邮局的情况,显然可以知道,将邮局建立在中间的那个村庄即可。也就是在a到b间建立一个邮局,若使消耗最小,则应该将邮局建立在(a+b)/2这个村庄上(可以通过画图知道)。2、下面考虑建立【多个】邮局的问题,可以这样将该问题拆分为若干子原创 2011-08-05 09:12:53 · 547 阅读 · 0 评论 -
hdu 2845 Beans--二维DP
/*题意:从格子里取数字,取了当前数字,则前一个后一个都不能取,前一行后一行也不能取看别人的 DP先是对每行DP f[i]=max(f[i-2]+a[i],f[i-1])每行计算过后,再对每行的结果进行这样的DP这题很巧 对每行来说,其中的每个元素不能取其前面的和后面的把行当做元素,那么这个矩阵也是一行,某行取了数,则其前一行和后一行不能取模型一样 */#includ原创 2012-08-16 16:14:26 · 599 阅读 · 0 评论 -
LightOJ 1110 An Easy LCS--DP
/*找出最长的字典序最小的公共子串这是我同学想的一方法在动态规划的时候给每个状态都求出 最长的字典序最小的公共子串动态规划是二维的,同时还要存一个公共子串 所以需要一个三维的字符数组*/#include#includeint dp[110][110],ls,lss;//dp动态规划用,记录长度 ls、lss分别代表s、ss的长度char s[110],ss[110],ma原创 2012-07-28 09:05:26 · 1095 阅读 · 0 评论 -
母函数
普通母函数解决的大部分是组合问题如:有1克、2克、3克、4克的砝码各一枚,能称出哪几种重量?每种重量各有几种可能方案? (1+x)(1+x^2)(1+x^3)(1+x^4)=(1+x+x^2+x^4)(1+x^3+^4+x^7)=1 + x + x^2 + 2*x^3 + 2*x^4 + 2*x^5 + 2*x^6 + 2*x^7 + x^8 + x^9 + x^原创 2012-07-16 19:03:36 · 507 阅读 · 0 评论 -
hdu 1950 Bridging signals--二分法求最长上升子序列
/***p[i]存长度为i的上升子序列的最小末元素*可以推出p[i]中的元素师按从小到大排列的,*因为长度为i的序列中可以找到一个长度为i-1的序列,长度为i-1的序列的末元素一定比长度为i的序列的末元素小,上升子序列么*若p[i-1]比p[i]大,则上述中的长度为i-1的序列的末元素可以更新它*若当前元素最大,则长度增加*否则找到一个他可以更新的,更新之**题意:针脚之间有一些连原创 2012-07-16 19:15:39 · 1314 阅读 · 0 评论 -
hdu 1059 Dividing--DP-多重背包问题
/* 多重背包问题 该题求的是能否拿到总价值的一半 可以假设 每个球消耗的空间和它的价值相等 则本题可转化为:在总空间一半的口袋里能否得到总价值的一半(因为价值密度为1,故最多能达到一半)*/#include#includeint d[120000],n[7],w;void cpack(int c,int ww){ int j; for(j=c;j<=w;j++) {原创 2011-08-01 14:30:16 · 614 阅读 · 0 评论 -
hdu 2686 Matrix - 最小费用最大流 或 多线程DP
/*hdu 2686 Matrix方阵(每个格子里面都有一个数字)里面从左上走到右下,再回来,一个点只能走一次,求数字之和最大是多少相当与从左上到右下选两条不交叉的路,使和最大典型的最大费用最大榴我要说的是,这是昨天的省赛的原题,当时就像到了什最大费用最大流,但是当时脑袋一热,又感觉不是(韩式我对这个算法的理解不够啊)其实只要在那个模板(http://blog.csdn.net/qq原创 2013-05-13 21:09:59 · 947 阅读 · 1 评论