动态规划-DP
tzb592825420
这个作者很懒,什么都没留下…
展开
-
codeforces 455A Boredom
从n个数里选数,每选一个k,得到k分,删除所有k+1和k-1,使得分最高。dp[i][0]表示第i个数不选,dp[i][1]表示选。最优情况一定是把所有数都用完。#include#include#include#include#include#include#include#include#include#include#define inf 10000000#def原创 2015-01-29 15:03:07 · 491 阅读 · 0 评论 -
hdu4604 最长上升,下降子序列nlogn
将数组反转后,求up[i]表示包括i的最长不降序列,down[i]表示最长不上升序列,取最优。nlogn的算法:若要求最长上升序列,p[i]表示长度为i的序列的末尾最小值(贪心,最小值更有潜力获得更长的串),很明显p是单调增的,当加入一个新元素时,二分p中最靠右的小于它的值j,更新p[j+1],同时记录up[i]。最长下降同理,p[i]表示长度为i的序列的末尾最大值(贪心,最大值更有潜力获得更原创 2015-05-29 21:00:50 · 553 阅读 · 0 评论 -
hdu5362 Just A String DP
Problem Descriptionsoda has a random string of length n which is generated by the following algorithm: each of n characters of the string is equiprobably chosen from the alphabet of sizem.原创 2015-08-09 12:29:19 · 696 阅读 · 0 评论 -
Codeforces Round #Pi (Div. 2) F. Mausoleum DP
点击打开链接题意:一系列数1,1,2,2,3,3,,,n,n,问形成1-k单调不减,k-n单调不增的排列数。另外有一些形如a>b,a=b,a分析:从1到n开始放置,或全放在首,或全放在尾,或放在首尾各一个,状态转移时判断是否可行。#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#incl原创 2015-08-12 19:42:36 · 519 阅读 · 0 评论 -
zoj3812 We Need Medicine 背包+位优化
We Need MedicineTime Limit: 10 Seconds Memory Limit: 65536 KB Special JudgeA terrible disease broke out! The disease was caused by a new type of virus, which will lead to lethal lymp原创 2015-08-27 00:14:02 · 443 阅读 · 0 评论 -
uva5318 The Goddess Of The Moon dp+矩阵快速幂
dp[i][j]表示前i个以j结尾的方案数,可以由一系列dp[i-1][k]相加得出。类似求斐波那契数的第n项,由于非常大,用矩阵快速幂转移。import java.io.*;import java.math.BigDecimal;import java.util.ArrayList;import java.util.Arrays;import java.util.Comparator原创 2015-08-01 16:00:54 · 318 阅读 · 0 评论 -
锯木厂选址 斜率dp优化
详细解释见点击打开链接#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include#include#define fi fir原创 2015-08-14 17:26:30 · 416 阅读 · 0 评论 -
Codeforces Round #316 (Div. 2) E. Pig and Palindromes DP
500*500的矩阵,从(1,1)走到(n,m),求走出一条回文道路的方案数。要求回文从起点s和终点t若相同则可以走,并且走(n+m-2)/2步相遇,每一步的状态只与上一步有关,两个数组轮换记录状态即可。#include#include#include#include#include#include#include#include#include#include#inc原创 2015-08-16 01:16:25 · 571 阅读 · 0 评论 -
hdu5168 Legal path DP,最短路
Legal path Accepts: 9 Submissions: 171 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)问题描述一个有向图,给定起点终点,每条边上有权值。一条合法的路径定义为相邻边的权值之差不小于KK的原创 2015-09-06 19:50:21 · 422 阅读 · 0 评论 -
hdu5117 Fluorescent DP,期望
题意:n盏灯,m个开关,每个开关控制一些灯,用1表示控制,0表示不控制,异或为1时这盏灯亮,每个开关可开可不开,概率相同。现在问E(x^3)*(2^m),E为期望,x为亮灯数。分析:如果求的是E[x]*(2^m),则可以考虑每一盏灯的状态,O(m)求出使这盏灯亮的方案数。现在求每种方案下,(x1+x2+x3+...+xn)^3,用0表示不亮,1表示亮,展开即为C*xi*xj*xk,当i,j原创 2015-10-06 16:08:40 · 394 阅读 · 0 评论 -
hdu5230 ZCC loves hacking
把一个数拆成不同整数的和有多少种方式。很诡异的递推,dp[i][j][0]表示j拆成i个整数且不含1的方案数,dp[i][j][1]表示含1的方案数,于是所有i个数都加1得到dp[i][j][0]+dp[i][j][1]=dp[i][j+i][0],不含1的加上一个1得dp[i][j][0]=dp[i+1][j+1][1],另外需要用滚动数组。#include#include#incl原创 2015-05-19 15:30:29 · 489 阅读 · 0 评论 -
hdu 5136 Yue Fei's Battle 树的dp计数
一棵二叉树的最长链长度为k,节点数不限,求所有形态数。f[i]表示深度为i的二叉树形态数,dp[i]表示深度#include#include#include#include#include#include#include#include#include#include#define fi first#define se second#define pii pair原创 2015-09-23 12:08:20 · 573 阅读 · 0 评论 -
codeforces63E Sweets Game DP,dfs,博弈
点击打开链接一道很好的题目,看似是一道博弈,竟然可以用dp来做,dp[s]表示这一状态能否获胜,如果存在走一步后得到状态ss,ss状态必然失败,那么s状态必然获胜,否则必然失败,状态转移先用数组处理一下就好写了。#include#include#include#include#include#include#include#include#include#include原创 2015-05-07 18:44:08 · 498 阅读 · 0 评论 -
codeforces 46E Comb
题意:n*m的矩阵每个位置一个数字,现在要从每一行取出c个数字,要求c1>c2c4....,且所取数字总和最大,n,m分析:dp[i][j]表示i行取j个元素且前i行满足条件,此时的最大值,dp[i][j]=dp[i-1][k]+d[i][j],能想到这里就够了。#include#include#include#include#include#include#include#原创 2015-03-12 19:13:00 · 621 阅读 · 0 评论 -
cf286C Mr. Kitayuta, the Treasure Hunter dp
很容易想到用dp[i][len]表示在i位置,跳跃len长度的最大值,但i和len都#include#include#include#include#include#include#include#include#include#include#define inf 10000000#define pi acos(-1.0)#define eps 1e-8#defin原创 2015-01-25 15:32:40 · 439 阅读 · 0 评论 -
zoj3632 Watermelon Full of Water 线段树,dp
n天要保证每天都有西瓜吃,每天都可以买一个西瓜,每天的西瓜有不同的价格且可以吃不同的天数,求最小花费。dp[i]=min(dp[k]+money[i]),day[k]+k>=i;用线段树维护dp[i];#include#include#include#include#include#include#include#include#include#include#defi原创 2015-01-10 23:29:20 · 456 阅读 · 0 评论 -
codeforces486 D. Valid Sets 树形dp
题意:一棵树有n个节点,每个节点有一个权值,要求出有多少这样的节点的集合s,满足条件1.非空,2.连通,3.权值最大减权值最小分析:先考虑d为无穷大,这样任何集合满足前两个条件即可,dp[r]表示以r为根的子树包括r节点和其他一些节点构成集合的个数,dp[r]=(dp[son1]+1)*(dp[son2]+1)*...;最后全加起来即可。再考虑一般情况,如何转化为以上所述特殊情况呢?按权值w从原创 2015-01-30 15:09:16 · 454 阅读 · 0 评论 -
codeforces288 E. Arthur and Brackets
题意:有n对括号,从左到右给出每对括号的长度区间,判断是否存在满足条件的合法序列并输出。分析:dp,想到了感觉好容易,dp[i][j]表示i-j对括号形成一个合法序列,它可由以下情况递推出来,i+1-j形成合法序列并且第i对括号扩在i+1-j外;第i-k对括号和k+1-j对括号都形成合法序列,最后dfs输出就ok了。做dp要多独立思考啊。#include#include#include#原创 2015-01-30 11:32:13 · 550 阅读 · 0 评论 -
codeforces 417D Cunning Gena
题意:有m道题,要分给n个朋友解决,每个朋友有不同的条件,酬劳,且每个朋友要至少k个显示器连接作者电脑才肯帮忙,所以作者需要买至少k个显示器。求解决所有问题所需最少的钱。分析:可以状压20个问题,实际是二维,dp[i][s]表示用前i个人解决s(二进制,解决问题的集合)所需最少钱,由于爆内存可省略第一维。正确的做法是先根据显示器数目将朋友排序,我纠结的是不排序维护一个mx数组表示s状态显示器的原创 2015-01-30 21:47:00 · 533 阅读 · 0 评论 -
codeforces 234F - Fence
感觉是个背包,开始想用dp[i][j]表示红色容量为j的最小值,同时记录这时i的颜色,但这样状态无法转移,可以再加一维dp[i][j][0]表示i为红色,dp[i][j][1]表示i为绿色,枚举j时表示的是前i个恰好用完j容量,绿色容量为tot[i]-j,所以初始化时dp[0][0][0]=dp[0][0][1]=0,其他为无穷大。#include#include#include#inc原创 2015-01-31 16:32:48 · 515 阅读 · 0 评论 -
背包问题
背包问题九讲 v1.0目录 第一讲 01背包问题 第二讲 完全背包问题 第三讲 多重背包问题 第四讲 混合三种背包问题 第五讲 二维费用的背包问题 第六讲 分组的背包问题 第七讲 有依赖的背包问题 第八讲 泛化物品 第九讲 背包问题问法的变化 附:USACO中的背包问题 前言本篇文章是我(dd_转载 2014-12-24 15:07:46 · 504 阅读 · 0 评论 -
cf 401D. Roman and Numbers 数位dp,状压
题意:给出两个数n,m,求x的个数,x需满足,x可由n的各位数字重新排列得到;x无前导零;x%m==0;分析:比较简单的一道数位dp,由于n最多只有17位,可以状态压缩,dp[s][v]表示用掉集合s中的数,余数为v的个数,状态转移方程dp[s+k][(v*10+dig[k])%m]+=dp[s][v];#include#include#include#include#includ原创 2015-02-04 23:05:55 · 585 阅读 · 0 评论 -
cf 432D.Prefixes and Suffixes KMP+dp
题意:求一个字符串有后缀与前缀相同的前缀在串中出现的次数。分析:根据next数组可求出所有前缀在传中出现的次数,dp[next[i]]+=dp[i],dp[i]初始为1。也可以很简单得求出哪些前缀有相同的后缀。#include#include#include#include#include#include#include#include#include#include#原创 2015-02-04 22:13:54 · 528 阅读 · 0 评论 -
codeforces 132 C. Logo Turtle
题意:给一个字符串,‘F’向当前方向走一步,‘T'转方向,改n次,一个符号可以改多次,求走完所有距原点最长距离。分析:dp[i][j][k][f]表示最长距离,i:第几个字符,j:前i步用改j次,第i步改k次,f:方向。#include#include#include#include#include#include#include#include#include#includ原创 2015-02-05 19:35:39 · 474 阅读 · 0 评论 -
codeforces 487 B. Strip
题意:一个数列分成若干段,满足两个条件,1.每一段长度l>=s,2.每一段mx-mi分析:一个很常见的思路,先预处理每个数最左边可行位置pre[i],动态方程,dp[i]=min(dp[k]+1),pre[i]-1#include#include#include#include#include#include#include#include#include#include#原创 2015-02-09 23:27:37 · 475 阅读 · 0 评论 -
cf Round #239 (Div. 1) B. Long Path
一个很重要的条件是从i跳跃到pi,1#include#include#include#include#include#include#include#include#include#include#define inf 10000000#define pi acos(-1.0)#define eps 1e-8#define seed 131using namespa原创 2015-02-17 22:56:55 · 454 阅读 · 0 评论 -
hdu5185 Equation DP
除了所有的数都为1,其他情况前面必有0,而最大的数不会超过sqrt(n),dp[i][j]表示0-i和为j的方案数。转移非常巧妙,dp[i][j]=dp[i][j-i]+dp[i-1][j-i],意义是i的个数>=2的情况数+i的个数为1的方案数。#include#include#include#include#include#include#include#include原创 2015-09-23 22:40:14 · 338 阅读 · 0 评论