![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
ijbuhv
这个作者很懒,什么都没留下…
展开
-
hdu4089Activation 概率dp
//一条队列对于第一个人的情况//概率p1:队列保持不变//p2:第一个人到队尾//p3:第一个人出队//p4:系统崩溃//队列中有N个人,Tomato 在第M位置,求系统崩溃,Tomato 前面的人数为小于k个人的情况的概率//dp[i][j] 表示队列中有i个人,Tomato 在第j个位置时出现目标状态的概率//可以很容易得到递推公式//dp[i][1] = p原创 2015-07-21 10:50:25 · 1304 阅读 · 0 评论 -
hdu4050wolf5x 概率dp
//有N个格子//p0:不能到达该格子//p1:只能左脚到达该格子//p2:只能右脚到达该格子//p3:任意脚都可到达该格子,而且下一脚可以是任意脚//人只能左脚右脚交替走,从0格出发走到的格子大于n或不能走就停止//问走多少步停止的数学期望//dp[i][0] 表示走到i格且下一脚出右脚的期望//dp[i][1] 表示走到第i格且下一脚出左脚的期望//dp[i原创 2015-07-22 19:49:16 · 689 阅读 · 0 评论 -
hdu5389Zero Escape 01背包
//给组数,将其分为两组,使得左边的所有的数的和mod9为a,右边为b//问方法数//01背包,dp[i][j] ,前i个数得到的mod9为j的个数//dp[i][j] = (dp[i-1][(j+9-tmp)%9] + dp[i-1][j])%mod ;#include<cstdio>#include<cstring>#include<iostream>using namespace原创 2015-08-15 14:31:07 · 564 阅读 · 0 评论 -
hdu4599Dice 概率dp+扩展欧几里得
//给一个正常的骰子//F[n] 为这个骰子有一个数连续出现n次的期望//h[n] 我这个骰子连续出现n个1的期望//g[n] 为出现n个1的期望//求最小的m1使得G(m1)>=F[n] , 最小的m2使得G(m2) >= H(n)//f[i] 一个数连续掷了i次,其F[n]//很容易得到f[i] = 1 + 1/6*f[i+1] + 5/6*f[1] f[n原创 2015-07-23 10:56:33 · 834 阅读 · 0 评论 -
hdu4081Qin Shi Huang's National Road System 次小生成树
//给出每点的坐标和其到人口量,找一个生成树,其中有一条边造价为0//问A/B的最大值,A这条边连接的两个点的人口之和//B除了这条边以外的其他边的长度之和//先找到最小生成树,然后枚举所有边,如果这条边是最小生成树上的边,//直接计算A/(sum-edge) ,如果不是,那么这条边加在最小生成树上会出现一个//环,去除这个环中的最长的边依然是一棵树,//用dp[u][v] 表示在最小生原创 2015-08-04 09:37:03 · 580 阅读 · 0 评论 -
hdu5000Clone dp
//一个人可以被克隆//被克隆的人有n种属性//如果一个人a的所有属性都大于等于另外一个人b//那么b就会被消灭//问最多能有几个被克隆的人//可以知道最大的时候一定有一种方案这里的所有人的属性和相等//因为对于两个共存的人a , c一定能找到一个属性和与其中一个相等且//与另一个不共存//由于是取模 , 所以先打表知道和取sum/2时最大#include#include#i原创 2015-09-08 21:16:06 · 314 阅读 · 0 评论 -
hdu4906Our happy ending 状压dp
//给出 n , k , l ( n , k <= 20 , l <= 1e9)//找出长度为n的序列 , 序列的所有数都小于l , 且序列中可以找出//一些数 , 其和为k//状态压缩//dp[i] i状态下有多少种情况 , i的二进制数中为1表示序列能组成这个数//next = (1<<(p-1))|j|((j<<p)&s) ;//dp[next] += dp[j] ; #i原创 2015-09-06 13:40:43 · 354 阅读 · 0 评论 -
hdu4901The Romantic Hero dp
//给一个序列//找两个子序列s 和t ,s序列中的所有元素的下标都小于t中所有元素//问有多少对这样的序列使得s序列中的所有元素异或值等于t序列中所有//元素取‘与’的值//l[i][j] 表示前i个数中异或值是j的所有情况//r[i][j] 表示从n到i中所有值取‘与’值为j的所有数的情况//然后枚举s序列的最后一个元素的位置 ,求出答案#include#include#in原创 2015-09-06 13:41:30 · 331 阅读 · 0 评论 -
hdu5492 Find a path dp
//给出n*m的格子//每一格都有相应的权值,从(1,1)点走到(n,m点)//(n+m-1)segma(ai-avg)^2(1<=i<=n+m-1)的最小值为多少 avg为所有ai的平均数//(n+m-1)segma(ai-avg)^2 = (segma((n+m-1)*ai - segma(ai))^2)/(n+m-1)//(segma((n+m-1)*ai - segma(ai))^原创 2015-09-27 18:26:25 · 637 阅读 · 0 评论 -
hdu4870Rating 概率dp
//两个账号 , 每次选rating小的去比赛 //每次比赛rating可能加50 , 可能减100(最多剪到0) //问刚开始两个比赛的rating都为0 到其中一个账号大于1000的期望//只考虑一个账号情况 ,// dp[0] = p*dp[1] + (1-p)dp[0] + 1 dp[0] = dp[1] + 1/p// dp[1] = p*dp[2] + (1-p)dp[0原创 2015-09-06 13:40:11 · 271 阅读 · 0 评论 -
hdu5410CRB and His Birthday 多重背包
//n个物品 , 容量为m//每个物品1个占用空间为w//如果第i个物品选了k(k>0)个,所得权值为k*a+b //求最大权值//多重背包 , 需要用二进制数优化#include#include#includeusing namespace std ;const int maxn = 2010 ;int dp[maxn][maxn] ;int main(){ //原创 2015-08-29 19:30:45 · 650 阅读 · 0 评论 -
hdu5045Contest 概率dp
//已知N个人对M道题做对的概率//怎样安排这N个人做这M道题使得其期望最大//要求任意时间任意两个人的做题差不大于1,换句话说,就是在没N道题中必须是不同的人做//可以用dp[i][j] 表示做到第i道题,且做题情况是j状态得到的最大期望//由于每N道题必须是不同的N个人做,所以当j的状态达到(1//dp[i][k] = max(dp[i][k] , p[j+1][i] +原创 2015-07-22 19:14:18 · 643 阅读 · 0 评论 -
hdu4405Aeroplane chess 概率dp水题
//从0到n有n+1个格子//对于格子i,掷一次骰子的数为x,那么可以从位置i到位置i+x//格子之间有连线,如果格子a和b有连线,那么从a到b不用掷骰子//求从0到n的骰子掷的次数的期望//dp[i] = 1/6*segma(dp[k]) + 1 (i#include#include#includeusing namespace std ;const int原创 2015-07-20 19:05:34 · 692 阅读 · 0 评论 -
hdu3722Card Game 概率dp水题
//3中天气前一天天气为i转为第二天天气为j的概率为p[i][j]//问第一天天气为i,n天后天气为j的概率//dp[i][j][k]在第一天天气为j的情况下第n天的天气为j的概率//dp[i][j][k] += dp[i-1][j][s]*dp[1][s][k] ;#include#include#includeusing namespace std ;const原创 2015-07-20 17:06:20 · 643 阅读 · 0 评论 -
hdu4003Find Metal Mineral 树形dp+分组背包
//k个机器人从一颗树的树根开始往下走,//走树的每条边都要消耗能量,问这k个人最少花多少能量能遍历所有点//dp[u][i] 表示以u点为根节点的子树用i个节点遍历最少需要多少能量//当i = 0时表示有一个点遍历了这颗子树又返回上一个节点#include<cstdio>#include<cstring>#include<iostream>#include<vector>using原创 2015-07-31 16:44:04 · 480 阅读 · 0 评论 -
poj1018Communication System dp
//一个系统需要n个设备,每个设备有不同的生产厂家,不同的厂家的设备的性能和价格不同//现在问要这个系统的B/P的最大值,B是N个设备性能最差的性能,P是n个设备的价格//dp[i][j] 表示前i个设备的性能大于等于j的最少价格#include<cstdio>#include<cstring>#include<iostream>using namespace std ;const i原创 2015-08-01 16:49:22 · 643 阅读 · 0 评论 -
hdu3499Consumer 依赖背包模板
//给n种箱子子//买下每种箱子后才能买需要这种箱子能装的物品//依赖背包#include<cstdio>#include<cstring>#include<iostream>using namespace std ;const int maxn = 100010 ;int dp[maxn] ;int tmp[maxn] ;int main(){ int n , m ;原创 2015-07-31 14:42:40 · 549 阅读 · 0 评论 -
hdu3076ssworld VS DDD 概率dp
//ssworld VS DDD 两个人有血量值 hp1 , hp2 //两人掷骰子得到每一点的概率已知//ssword赢的概率//dp[i][j] 表示有第一个人血量为i,第二个人的血量为j第一个人赢的概率//第一个人赢,第二个人赢 , 平局的概率为p1 , p2 , p3//那么有dp[i][j] = p2*dp[i-1][j] + p1*dp[i][j-1] + p3*原创 2015-07-21 19:35:21 · 755 阅读 · 0 评论 -
hdu3339 In Action 最短路+01背包
//有n个电站,每一个电站能提供不同的power,//所有tank从0点出发,停在该电站就代表摧毁了该电站,tank从电站到电站之间需要耗费能量//现在有无穷的tank,问最少需要耗费多少油能够摧毁一半以上的power//先用dijkstra求得到每个点的dis[i]//然后用一个01背包得到答案#include<cstdio>#include<cstring>#include<ios原创 2015-08-01 09:57:17 · 672 阅读 · 0 评论 -
hdu4711Weather 概率dp
//第i个城市到第j个城市的概率ma[i][j]//第i天的天气天气wet[i]//第i个城市天气为j的概率wet_m[i][j]//Hovey从0点开始,找出其概率最大的路线//dp[i][j] 表示在第i天Hovey在第j个城市在所有路线的最大概率//dp[i][j] = dp[i-1][k].p+ma[k][j]+wet_m[j][wet[i]]//但是由于精度问题,原创 2015-07-22 22:07:38 · 712 阅读 · 0 评论 -
hdu5001 Walk 概率dp
//给一个无向图 , n个节点,m条边//每个节点为起点的概率相同 //问每个节点走d步后不经过这个节点的概率//不经过这个节点的概率等于去掉该节点的图中走了d步到其他节点的和//dp[i][j] 为走了i步到达j个节点的概率//dp[i][j] = segma(dp[i-1][v])/vec[j].size()#include#include#include#原创 2015-07-22 14:58:57 · 872 阅读 · 0 评论 -
zoj3822Domination 概率dp
//一个n*m的棋盘//每次在棋盘上没放子的位置等概率地放子//问使得棋盘上的每一行和每一列至少有一个子的放子的期望//dp[i][j][k] 表示剩下k个空白位置 ,i个空白行 , j个空白列的期望//那么这一次放子有四种情况//1:放在空白行和空白列的概率p1 = i*j*/k//2:放在空白行不是空白列的概率p2 = (m*i-i*j)/k//3:放在空白列不是空白行的概率p3原创 2015-09-12 14:28:39 · 397 阅读 · 0 评论 -
hdu5489Removed Interval 最长递增子序列
//给一个长度为n的序列//在其中去除长度为l的连续的序列 //剩下的序列的最长递增子序列的最长的长度为多少//维护两个数组,前面一个数组//数组a[i] 表示从前到后,长度为i的最后一个数的最小值//数组b[i] 表示从后往前,长度为i的最大得一个数//然后从前到后遍历,//由于每前进一位,a[i] , 和b[i]只改变一个数//所以只需要对于那个更新的数在另一边用二分找一下就行原创 2015-09-27 17:49:55 · 1300 阅读 · 0 评论 -
hdu5073Galaxy dp
//n个数,最多移动k个数,使得这//n个数的segment((xi - X)^2)(1<=i<=n) //其中X为这n个数的平均数//可以考虑将k个数移动到剩下的(n-k)个数的//平均数中,然后就相当于,从n中选k个数其方差最小//然后可以将这n个数排一下序,选的n-k的数一定是//连续的,这个应该比较容易想到,然后//dp[i] 表示最后一个数为i的连续n-k个数方差//然后原创 2015-10-12 21:35:59 · 359 阅读 · 0 评论 -
hdu5115Dire Wolf 区间dp
//给n条狼 ,杀每条狼都会对自己有一个伤害值 //而且相邻两只狼可以对对方的伤害有增益 //当一只狼被杀了后,原来与它相邻的狼相邻 //给出每只狼的伤害值和每只狼对相邻狼的增益值 //问怎样安排杀狼顺序使得受到的伤害值最小 //dp[i][j]表示从i开始的长度为j的区间所有狼被杀的受到的最小伤害 //dp[i][j] = min( dp[i][k-1] + a[i+k-1] + dp原创 2015-09-23 19:55:29 · 452 阅读 · 0 评论 -
hdu4734 F(x) 数位dp
//对于一个十进制的数A,其每一位的权值为2^(n-1)得到的值即为//这个数的权值,现在给出A,B//问在区间[0,B]中的所有数权值小于等于//A的权值的个数为多少//dp[i][j] 表示第i位权值小于等于j的数的个数//用记忆化搜索得到答案#include<cstdio>#include<cstring>#include<iostream>using namespace s原创 2015-09-23 22:31:21 · 340 阅读 · 0 评论 -
hdu5009Paint Pearls dp
#include#include#include#include#includeusing namespace std ;const int maxn = 5e4+10 ;const int inf = 1e9 ;int dp[maxn] ;int a[maxn] ;map ma;int pre[maxn] ;int last[maxn] ;int main(){原创 2015-11-12 21:28:45 · 415 阅读 · 0 评论 -
hdu5074Hatsune Miku dp水题
#include#include#includeusing namespace std ;const int maxn = 110 ;int dp[maxn][maxn] ;int ss[maxn][maxn] ;int a[maxn] ;int main(){ int t ; scanf("%d" , &t) ; while(t--) {原创 2015-10-12 21:38:01 · 354 阅读 · 0 评论 -
hdu4810Wall Painting dp+异或
//给出n个数,求出所有从c(n,k)中情况//从这n个数中选出k个的到的所有数异或值之和//dp[j][k][0] 前i个数,选j个数,用二进制表示第k位是0的数的个数//dp[j][k][1] 前i个数,选j个数,用二进制表示第k位是1的数的个数#include#include#include#includeusing namespace std ;const int m原创 2015-10-13 21:19:41 · 431 阅读 · 0 评论 -
hdu4968Improving the GPA dp
//給定平均分和科目數量,//求平均績點的最大值和最小值。//dp[0/1][i][j] 表示i们课,总分为j的最小/大值#include#include#includeusing namespace std ;const int maxn = 1010 ;const int inf = 1e8 ;double dp[2][20][maxn] ;double c[maxn]原创 2015-11-14 16:00:13 · 352 阅读 · 0 评论 -
hdu4815Little Tiger vs. Deep Monkey 概率dp
//给n(<=40)个数ai(<=1000)//猴每次0.5的概率得到ai这个分数//问人最少需要多少值才能在概率至少大于p的情况比//猴的分数大#include#include#includeusing namespace std ;const int maxn = 4e4+10 ;double dp[maxn] ;int main(){ int t ; s原创 2015-11-18 17:58:22 · 334 阅读 · 0 评论 -
hdu5593ZYB's Tree 树形dp
#include#include#include#includeusing namespace std ;const int maxn = 5e5+10;typedef long long ll ; int dp[maxn][12];int ans[maxn][12];int n , k ;vector vec[maxn] ;void dfs(int u){ for(原创 2015-12-12 21:28:09 · 413 阅读 · 0 评论 -
hdu4284Travel 状态dp
//n个城市,m条路,过每条路需要花费钱//在每个城市花费d[i]得到工作资格可以赚c[i]的钱//现在手上有num钱,问能否从1点开始,在给定的h(h<=15)个城市找到//工作在回到1点//除了这h点的其他点不能工作,可以经过这h个点不工作//可以先用一个floyd将任意两点的最短距离求出//由于h很小,可以用状态压缩来做,1表示已经在这个城市工作过,0表示没有//dp[i][j原创 2015-10-09 19:19:22 · 331 阅读 · 0 评论 -
hdu4283You Are the One 区间dp
//n个人,每个人有屌丝系数di//对于第i个人第j个出来,那么其不高兴值为(j-1)*di//可以用一个栈来控制这些人的出去顺序//问其怎样安排使得所有人的不高兴值最小为多少//用dp[i][j]表示从i开始的长度为j的区间的最小不高兴值//dp[i][j] = min(dp[i][j] ,min(dp[i][k] + dp[i+k][j-k] + k*sum[i+k][i+j-1]原创 2015-10-09 16:26:43 · 312 阅读 · 0 评论 -
zoj3735Josephina and RPG
//给出一个表map[i][j]表示第i个人物打败第j个人物的概率//现在给定一个挑战人的顺序,当挑战的人打败了现在挑战的//人,可以和他交换人物,刚开始可以选择任何人物//问打败所有人的最大概率为多少#include#include#include#includeusing namespace std ;const int maxn = 1e4+10 ;double dp[原创 2015-10-20 20:12:32 · 543 阅读 · 0 评论 -
hdu5534 Partial Tree 完全背包
//对于度数为i,其权值为f[i]//问怎样构建一棵点数为n的树,使得它们的权值之和最大,求这个最大值//这棵树的总点数为2*(n-1),先将所有的点都分配一个度//然后在剩下的n-2个度用完全背包做//dp[i]表示i个度的最大值#include#include#includeusing namespace std ;const int maxn = 3010 ;int f原创 2015-11-07 21:42:39 · 488 阅读 · 0 评论 -
hdu4293Groups dp
//n个人,每个人说出在他所在组前面的人的个数a和在他组后面的人的个数b//其中有些人说真话有些人说假话,问最多有多少有多少个人说真话//对于每个人所说的话,可以推测他所在区间为[a+1,n-b]//可以用dp[i] 表示右区间到i得到的最大的说真话的人的个数//用map[i][j]表示右区间为i其左区间前面一个数为j的人的个数#include<cstdio>#include<cstri原创 2015-10-07 18:18:57 · 288 阅读 · 0 评论 -
hdu5396Expression 区间dp
//n(n<=200)个数字,n-1个运算符,运算符分别是"+,-,*"//可以改变运算符大的运算顺序,那么有(n-1)!中运算结果//问所有这些结果的和//区间dp应该很好想到//dp[i][j] 表示从i开始的j个数的(j-1)!中运算结果之和//枚举最一个运算的运算符的位置//那么对于'*'操作由于其分配率可以直接左右区间相乘就行//对于'+'和'-'操作需要乘上另一个区间的情原创 2015-10-21 22:35:41 · 405 阅读 · 0 评论 -
hdu5532Almost Sorted Array 最长递增子序列模板水题
//给出长度为n的序列,只去掉一个点使得//其为不减或者不增的序列//直接求出最长递增子序列,看其是否大于等于//n-1就行#include#include#include#includeusing namespace std ;const int maxn = 2e5+10 ;int a[maxn] , b[maxn] ;int main(){ int t ;原创 2015-11-07 17:12:52 · 354 阅读 · 0 评论 -
hdu5325Crazy Bobo 树形dp
//给一颗树,从这棵中,树上每个点都有权值//选出一些点集,这个点集在这棵树中是连续的//将这些点集按照权值从大到小排序,相邻的两个点的唯一路径中//经过的所有点的权值都要小于它们//选出的子树中的根节点一定小于其子节点//dp[u] 表示以u为根节点的子树能有多少节点//然后再用以个dfs变换一下根节点,选出最大就行#pragma comment(linker,"/STACk:10原创 2015-11-07 19:11:00 · 359 阅读 · 0 评论