- 博客(21)
- 资源 (7)
- 收藏
- 关注
原创 poj 3071 概率dp 求概率
题意: 一共有2^n支队伍,每支队伍对其他队伍都有一个相应的胜率,1队伍和2队伍打,2队伍和3队伍打,以此类推,赢得队伍进行下一轮的比赛,输的淘汰。下一轮同样头两支队伍进行比赛,以此类推,问哪支队伍最有可能获胜。题解:某支队伍想获胜,就必须打败其它的所有队伍。根据hint我们可以发现,dp[k][i]=dp[k-1][i]*sum(dp[k-1][j]*p[i][j]);dp[k][i]为
2012-12-13 21:06:30 361
原创 hdu 4035概率dp 求期望
仍然膜拜中。。。原文 仍是看了大神的blog才明白,看明白了以后就各种膜拜了。。。。dp求期望的题。 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点1处(概率为ki) 2.找到出口,走出迷宫 (概率为ei) 3.和该点相连有m条边,随机走一条 求:走出迷宫所要走的边数的期
2012-12-13 13:08:42 543
原创 zoj 3329 概率dp 求期望
看到网上 http://blog.csdn.net/morgan_xww/article/details/6775853 写的真的好厉害。。我都能看懂。。膜拜一下dp求期望的题。 题意: 有三个均匀的骰子,分别有k1,k2,k3个面,初始分数是0, 当掷三个骰子的点数分别为a,b,c的时候,分数清零,否则分数加上三个骰子的点数和, 当分数>n的时候结束。求需要掷骰子的次数的
2012-12-13 11:07:38 468
原创 hdu 4405 概率dp 求期望
所谓期望,就是平均值。题意:飞行棋,从0到n,置骰子,置到几就往前走几步,前进中会有捷径,比如2和5连到一起了,那你走到2时可以直接跳到5,如果5和8连到一起了,那你还可以继续跳到8.最后问跳到n时平均置几次骰子。也就是求期望。状态方程很好推 从后往前,i点的期望为六种情况和+1。但是有一点需要注意:如果当前i点再加上你的骰子数大于n了,那么这个就不能加了。#includ
2012-12-10 20:43:20 521
原创 poj 2096 概率dp
网上看到的一个题解,讲的非常好。引用一下dp求期望的题。 题意:一个软件有s个子系统,会产生n种bug。 某人一天发现一个bug,这个bug属于某种bug,发生在某个子系统中。 求找到所有的n种bug,且每个子系统都找到bug,这样所要的天数的期望。 需要注意的是:bug的数量是无穷大的,所以发现一个bug,出现在某个子系统的概率是1/s, 属于某种类型的概率是1/n。
2012-12-10 12:17:30 395
原创 hdu 3853 概率DP
概率dp入门题状态转移方程:dp[i][j]=dp[i][j+1]*pos2[i][j]/(1-pos1[i][j])+dp[i+1][j]*pos3[i][j]/(1-pos1[i][j])+2/(1-pos1[i][j]);但要注意,当点(i,j)移动概率为1时,说明这点不应该到达。#include#include#includeusing namespace s
2012-12-10 11:30:57 400
原创 hdu 1011 树型dp+背包
#include#include#includeusing namespace std;int pos,n,m,list[200],bug[200],brain[200],dp[200][200];struct P{ int u,v,next;}point[1000];void add(int u,int v){ point[pos].u=u; point[p
2012-12-08 21:45:22 418
原创 poj 1155 树型dp+背包
题意:一颗树,叶子节点含有正值,每通过一条边,要有一定的花费,问,从1(根节点)出发,最多到达多少叶子节点使花费不为负。题解:第一到树型背包问题。。纠结了好久。。。。。对于某个节点来说,那么他的那些子节点就可以看成物品了。要么取,要么不取。他的子节点中叶子节点个数就是背包的容量。分别对每个节点进行背包就行了。dp[i][j]含义为当前i这个节点含有j个物品时的最大价值。那么有转
2012-12-07 20:22:13 409
原创 poj 3140 树型DP
题意:一颗树,去掉某条边,使得剩下的两部分差值最小。问最小差值是多少题解:sum数组存储该节点及其子树的和。深搜一次算出sum,再枚举一次,得到最小差值。注意此题的long long#include#include#includeusing namespace std;long long sum1,n,m,value[100010],list[100010],sum[100
2012-12-05 13:44:59 381
原创 poj 1655 树型DP
题意:n个点,给你一棵树,去掉某个点会产生一些个连通块。问去掉哪个点,会使剩下的含有最多节点个数的某个连通块 节点个数最小。#include#include#includeusing namespace std;int cas,sum[20010],max1[20010],list[20010],n,pos;struct P{ int u,v,next;}point[
2012-12-05 12:57:10 450
原创 poj 2378 树型DP
题意:n个点组成了一棵树,去掉某一个点会出现一些个连通块,问去掉哪些个点会使剩下的连通块中 最大的那个连通块小于等于n。题解:和poj 3107 一样。。。。#include#include#includeusing namespace std;int sum[10010],max1[10010],list[10010],n,pos;struct P{ int u
2012-12-05 12:46:12 370
原创 poj 3107 树型DP
题意:一个无向树,去掉某一个节点,会出现几个连通块,问去掉哪些个节点,会使剩下的连通块中 含有最多节点个数的那个连通块节点个数最小。题解:sum数组存储子树的节点个数,max1数组存储孩子树中节点最大值。最大的连通块值就是max(max1[i],n-sum[i]);这道题靠自己1A了,所以今天上午好开心啊~~#include#include#includeusi
2012-12-05 12:33:00 430
原创 hdu 2196 树型DP
题意:n个点,n-1条边,每个边有权值。问这n个点到叶子节点的最大距离分别是多少。题解:建一个无向树,1为根结点。我们思考:一个树到叶子节点的最大距离,要么就是他子树中叶子节点到他的最大距离,要么就是找到一条不经过他的从他父亲节点过来的一条路径。那么,我们就这么思考,从他(称之为i)子树中的叶子节点到他的最大距离我们很容易能找到,如何去寻找从他父亲节点(称之为fa)过来的路径呢?一般来
2012-12-05 11:24:45 382
原创 hdu 3586树型DP
依旧。。不会。。二分,因为题中说要找到代价和小于m并且输出那个代价和中最大的边,就要用到二分了。对每个边判断其实否小于二分中mid的值(也就是limit)状态转移方程:if(w[j与其孩子的边的代价] else dp[j]+=dp[j的孩子];#include#include#include#define Max
2012-12-04 11:30:33 397
原创 hdu 1520 树型DP
这周任务。。树型DP题意:n个人,他们具有上下级的关系,他们每个人都有一个值,我们的目的是找这么一些人,使他们的和最大,并且他们不能是上下级的关系。就是我叫了你的上级或者下级,你就不能来了。。都说是树型DP裸题。。可我连什么是树型DP都不知道T,T 好吧,看了别人的代码,才了解一点点。就是对你这棵树进行由叶子到根的DP。这题DP思想很像hdu 2845。当前存在两种状态。对于i
2012-12-03 20:59:45 427
原创 poj 2576二维01背包
题意: n个人,他们有他们的重量,要求分成两份,人数与n/2差不能大于1,体重差最小,问两组的体重分别是多少。#include#include#includeusing namespace std;int n,wi[120],sum,sum1,n1,dp[50000][103];int main(){ while(scanf("%d",&n)!=EOF){ sum
2012-12-02 13:15:34 655
原创 poj 1787 多重背包+路径记录
4种钱币,价值是1 5 10 25,给你他们的个数,问能不能用最多的钱币到达p,如果能输出每种的个数,不能输出不能。。开个numb二维数组记录路径。#include#include#includeusing namespace std;int numb[11000][4],dp[20000],ci[4],p,wi[4];void complete(int cost,int i
2012-12-01 21:29:08 938
原创 hdu 1712 分组背包
题意:n种科目,m种方法,a[i][j]代表第i个科目花费j天所能得到的价值。问最大价值为多少就是分组背包的模版题,但要注意 k#include#include#includeusing namespace std;int a[110][119],n,m,dp[10000];int main(){ while(scanf("%d%d",&n,&m)&&n&&m){ fo
2012-12-01 20:08:57 288
原创 hdu 1248 多重背包水题
好水。#include#include#include#includeusing namespace std;int n,it[3],dp[20000],cas;int main(){ it[0]=150;it[1]=200;it[2]=350; scanf("%d",&cas); while(cas--){ scanf("%d",&n);
2012-12-01 11:49:49 344
原创 hdu 1171 多重背包
题意:n种物品,每种物品的钱数及个数,问分成两份,使两份价值差最小。输出两份物品的价值。背包容量为所有物品总价值和的一半,所能达到的最大价值就是其中的一种物品。另一种一减就是了。#include#include#includeusing namespace std;int n,sum,value[60],numb[60],dp[1000000];void complete(i
2012-12-01 11:48:27 427
原创 poj 1276 多重背包
给你一个cash,n种钱,每种钱的数量及价值,问最大接近cash凑成多少。就是多重背包。#include#include#includeusing namespace std;int cash,n,numb[20],value[20],dp[1000000];void complete(int cost){ for(int j=cost;j<=cash;j++){
2012-12-01 11:10:08 326
xgboost编译后.rar
2016-05-12
hadoop+HA+zookeeper+hbase配置文件
2015-04-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人