poj1189 简单dp
http://poj.org/problem?id=1189
Description
让一个直径略小于d的小球中心正对着最上面的钉子在板上自由滚落,小球每碰到一个钉子都可能落向左边或右边(概率各1/2)。且球的中心还会正对着下一颗将要碰上的钉子。比如图2就是小球一条可能的路径。
我们知道小球落在第i个格子中的概率pi=pi=
,当中i为格子的编号,从左至右依次为0,1,...,n。 如今的问题是计算拔掉某些钉子后,小球落在编号为m的格子中的概率pm。
假定最以下一排钉子不会被拔掉。比如图3是某些钉子被拔掉后小球一条可能的路径。
Input
Output
Sample Input
5 2
*
* .
* * *
* . * *
* * * * *
Sample Output
7/16
/**
poj1189 简单dp
题目大意:又是中文题~
解题思路; 总共会出现2^n种情况,我们一開始就如果有2^n个球在(1,1)点往下落。 对于每个没有挖掉的钉子(i,j):dp[i+1][j]+=dp[i][j]/2; dp[i+1][j+1]+=dp[i][j]/2;
对于挖掉的钉子(i,j):dp[i+2][j+1]+=dp[i][j];
*/
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
typedef long long LL; bool a[2555];
int n,m;
LL dp[55][55]; LL gcd(LL x,LL y)
{
if(y==0)return x;
return gcd(y,x%y);
} int main()
{
while(~scanf("%d%d",&n,&m))
{
int k=1;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=i; j++)
{
char str[12];
scanf("%s",str);
if(str[0]=='*')
{
a[k++]=true;
}
else
{
a[k++]=false;
}
//printf("%d\n",a[k-1]);
}
//puts("");
}
memset(dp,0,sizeof(dp));
dp[1][1]=1LL<<n;
for(int i=1; i<=n; i++)
{
int x=i*(i-1)/2;
for(int j=1; j<=i; j++)
{
if(a[j+x])
{
dp[i+1][j]+=dp[i][j]/2;
dp[i+1][j+1]+=dp[i][j]/2;
}
else
{
dp[i+2][j+1]+=dp[i][j];
}
}
}
LL x=1LL<<n;
LL y=dp[n+1][m+1];
LL g=gcd(x,y);
printf("%lld/%lld\n",y/g,x/g);
}
return 0;
}
poj1189 简单dp的更多相关文章
- HDU 1087 简单dp,求递增子序列使和最大
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- Codeforces Round #260 (Div. 1) A. Boredom (简单dp)
题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...
- codeforces Gym 100500H A. Potion of Immortality 简单DP
Problem H. ICPC QuestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/a ...
- 简单dp --- HDU1248寒冰王座
题目链接 这道题也是简单dp里面的一种经典类型,递推式就是dp[i] = min(dp[i-150], dp[i-200], dp[i-350]) 代码如下: #include<iostream ...
- poj2385 简单DP
J - 简单dp Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:65536KB 64bit ...
- hdu1087 简单DP
I - 简单dp 例题扩展 Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB ...
- poj 1157 LITTLE SHOP_简单dp
题意:给你n种花,m个盆,花盆是有顺序的,每种花只能插一个花盘i,下一种花的只能插i<j的花盘,现在给出价值,求最大价值 简单dp #include <iostream> #incl ...
- hdu 2471 简单DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2571 简单dp, dp[n][m] +=( dp[n-1][m],dp[n][m-1],d[i][k ...
- Codeforces 41D Pawn 简单dp
题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...
随机推荐
- mul16
设计思想:乘法运算本身就可以看做是一个移位相加的过程 1 1 0 1 0 = 26* 1 0 1 1 1 = 23 ...
- Flask web应用
Flask web应用 一.介绍 最近开发要用一个测试环境,是这样的Nginx+uwsgi+flask 的一个结构.下面是一些记录,在Centos 系统上使用Flask 架构部署一个简单的Python ...
- VC++共享数据段实现进程之间共享数据
当我写了一个程序,我希望当这个程序同时运行两遍的时候,两个进程之间能共享一些全局变量,怎么办呢?很简单,使用VC\VC++的共享数据段.; #pragma data_seg()//恢复到正常段继续编程 ...
- 在 vb中 "end","unload me","exit sub" 之间的区别
之前就想过这个问题,这么熟悉的几个东西居然对他们分析的不是很透彻. “End” 跟 “Unload Me” 在敲程序 的时候经常敲到,“exit sub” 更是熟悉,下面,解析: End ...
- Vim 使用设置
转自:http://www.cnblogs.com/end/archive/2012/06/01/2531147.html Vim 作为最好用的文本编辑器之一,使用vim来编文档,写代码实在是很惬意的 ...
- WinForm - 两个窗体之间的方法调用
方法1: 所有权法//Form1://需要有一个公共的刷新方法public void Refresh_Method(){ //...} //在调用Form2时,要把Form2的所有者设为F ...
- ExecuteReader: CommandText 属性尚未初始化
没有对sqlcommand对象的commandtext属性赋值说白了就是没写SQL语句 -.- 无语死了.
- BZOJ 1475: 方格取数( 网络流 )
本来想写道水题....结果调了这么久!就是一个 define 里面少加了个括号 ! 二分图最大点权独立集...黑白染色一下 , 然后建图 : S -> black_node , white_no ...
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑(很详细,还有自动动手编程探测dll)
阅读目录 dll文件不匹配导致数据库无法启动 究竟是System32还是SysWow64 区分dll文件32位64位的程序让我倍感迷惑 再次判断究竟是System32还是SysWow64——意想不到的 ...
- C++ map排序(按照value值排序)_glp_hit_新浪博客
C++ map排序(按照value值排序)_glp_hit_新浪博客 C++ map排序(按照value值排序) (2012-07-12 14:19:51) 转载▼ 标签: ...