博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3071 可能DP
阅读量:7086 次
发布时间:2019-06-28

本文共 1126 字,大约阅读时间需要 3 分钟。

http://poj.org/problem?

id=3071

推方程不难,可是难在怎么算

dp[i][j]表示第i场时第j仅仅队伍存活下来的概率 

方程:dp[i][j]=sigma(dp[i-1][j]*p[j][k]*dp[i-1][k])

j,k在同一场的条件:if(((k>>(i-1))^1)==(j>>(i-1)))即推断k的第i位前的数没有比过的是否与j的在同一棵子树上。(i从1取,j,k从0取)

题解參考 http://blog.csdn.net/pbj1203/article/details/6950450

//#pragma comment(linker, "/STACK:102400000,102400000")#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define ls(rt) rt*2#define rs(rt) rt*2+1#define ll long long#define ull unsigned long long#define rep(i,s,e) for(int i=s;i
>1;const double EPS = 1e-8;const int INF = 100000000;const int MAXN = 1000;double p[MAXN][MAXN],dp[MAXN][MAXN];int N,n;int solve(){ CL(dp,0); rep(i,0,n)/ dp[0][i]=1; repe(i,1,N) rep(j,0,n) rep(k,0,n) if(((k>>(i-1))^1) == (j>>(i-1))) dp[i][j]+=dp[i-1][j]*dp[i-1][k]*p[j][k]; int ans=-1; dp[0][0]=-1; rep(j,0,n) if(dp[N][j]>dp[0][0]) { ans=j; dp[0][0]=dp[N][j]; } return ans+1;}int main(){ while(~scanf("%d",&N) && N!=-1) { n=1<

版权声明:本文博主原创文章,博客,未经同意不得转载。

你可能感兴趣的文章
asp.net上传文件夹权限配置以及权限配置的分析
查看>>
IPC's epoch 6 is less than the last promised epoch 7
查看>>
C语言 · 寂寞的数
查看>>
android Menu 笔记
查看>>
Apache2.2和Apache2.4中httpd.conf配置文件 权限的异同
查看>>
error:Flash Download failed-“Cortex-M3”,“Programming Algorithm”【转】
查看>>
小tips:JS之break,continue和return这三个语句的用法
查看>>
【Java】Java_09 类型转换
查看>>
AndroidStudio gradle配置
查看>>
poj3067 Japan(树状数组)
查看>>
[java面试]关于多态性的理解
查看>>
常见的MIME类型
查看>>
Leetcode_Wildcard Matching
查看>>
docker 私有仓库简易搭建
查看>>
WCF系列教程之客户端异步调用服务
查看>>
P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers
查看>>
Android自带的分享功能案例
查看>>
Android广播机制分析
查看>>
Android ADB工具-截图和录制视频(五)
查看>>
PHP/Javascript 数组定义 及JSON中的使用 ---OK
查看>>