概率dp ural 1776. Anniversary Firework
来源:互联网 发布:金贵洗浴软件 编辑:程序博客网 时间:2024/06/06 07:50
题目链接:
http://acm.timus.ru/problem.aspx?space=1&num=1776
题目意思:
要把1-n个火箭都点火,其中每次点火间隔10s.
点火步骤:1、首先点燃第一个和最后一个
2、点燃任意两个已点火箭的中间一个。注意可以有多个区间,每次可以同时点燃多个。
求点燃所有火箭的时间的期望。
解题思路:
比赛的时候想简单了,认为左边的时间期望和右边的时间期望的最大值就是此时下一步的时间期望,被虐了。
应该根据期望=概率乘以时间,用dp[i][j]表示恰好点燃i个火箭花j个十秒的概率。
为了求出dp[i][j],我们构造另外一个sum[i][j]表示点燃i个火箭,花小于等于j个十秒的概率。
则当火箭为i个的时候,枚举当前点燃的火箭(1-i),则左边的火箭个数为j-1,右边的火箭个数为i-j.
继续枚举花10秒次数,分别求出dp[i][k]=dp[l][k-1]*sum[r][k-1]+dp[r][k-1]*sum[l][k-1]-dp[l][k-1]*dp[r][k-1].
然后更新sum[i][1-n].
代码:
#include<iostream>#include<cmath>#include<cstdio>#include<cstdlib>#include<string>#include<cstring>#include<algorithm>#include<vector>#include<map>#include<stack>#include<list>#include<queue>#define eps 1e-6#define INF (1<<30)#define PI acos(-1.0)using namespace std;double dp[450][450];double sum[450][450];int main(){ int n; while(scanf("%d",&n)!=EOF) { n=n-2; memset(dp,0,sizeof(dp)); memset(sum,0,sizeof(sum)); dp[0][0]=1.0; for(int i=0;i<=n;i++) sum[0][i]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) //假设选择第j个 { int l=j-1,r=i-j; //左边的个数,右边的个数 int temp=max(l,r)+1; for(int k=1;k<=temp;k++) { //左边恰好用k-1次,右边<=k-1次。或者。。 dp[i][k]+=(dp[l][k-1]*sum[r][k-1]+sum[l][k-1]*dp[r][k-1] -dp[l][k-1]*dp[r][k-1])/i; } } for(int j=1;j<=n;j++) sum[i][j]=sum[i][j-1]+dp[i][j]; } double ans=0; for(int i=1;i<=n;i++) ans+=dp[n][i]*i; printf("%.10lf\n",ans*10.0); } return 0;}
- 概率dp ural 1776. Anniversary Firework
- 【URAL 1776】Anniversary Firework(概率DP)
- URAL 1776Anniversary Firework 概率dp+区间dp
- Ural1776: Anniversary Firework(概率DP)
- URAL 1039 Anniversary Party 树形dp
- URAL 1039 Anniversary Party (树形DP)
- URAL 1039 / poj2342-Anniversary Party-树形DP
- timus 1039. Anniversary Party URAL解题报告 树形DP
- ural 1039 Anniversary Party
- ural 1039 Anniversary Party
- ural 1039 Anniversary Party
- fireWork
- URAL 1994 The Emperor's plan 概率dp
- 【树形DP】Anniversary party
- 1039. Anniversary Party (dp)
- Anniversary party_poj2342_树形dp
- Anniversary party--树形DP
- 树状dp Anniversary party
- Android里面i.getStringExtra什么作用
- hibernate映射复合主键-1
- OAUTH认证介绍
- SAP HANA内存平台深度剖析
- gluLookAt()
- 概率dp ural 1776. Anniversary Firework
- 利用CrystalReport与C#生成报表(vs2010+sql2008)
- alpha测试和beta测试的区别
- 女司机撞女童后打人称后台硬 引发市民围堵砸车
- 用Intent 对象实现两个(多个)Activity之间的跳转和参数传递
- Subsets
- 算法(分治)合并排序和快速排序
- 使用AMDU工具从无法MOUNT的DISKGROUP中抽取数据文件
- HDU 1269 迷宫城堡 Tarjan算法水题之神奇建图