坑,一开始以为,分成两半的时候去最大那个就行了,

实际上这样是不对的,因为有可能出现小的一半的时间比大的要长,

因为还和等待次数有关,且转移的时候需要用到次数更小的状态,

所以状态定义为二维,dp[i][j]表示长度为i的区间,放小于等于j次的概率。

要求确切的某次的概率,比如k,就只要用dp[i][k]-dp[i][k-1]就行了。

如何转移?从小到大枚举i,从小到大枚举j,初始化dp[i][j] = dp[i][j-1],

然后求出确切等待j次的概率,以k为界限划分区间,分成l,r两段,加上l区间等待j-1次且r区间等待小于等于j-1次的概率,

类似得加上r区间等待j-1次且l区间等带小于等于j-1次的概率,然后减掉重复计算的状态。

因为只要求中间等待的次数,且一开始要放两个鞭炮,所以可以等效为一开始不计等待,之后每次都计算等待时间。

还有一个细节是每次j从2开始枚举,放一次的只可能是长度为1的情况。

g++使用%lf正常,但在有些oj却会出问题

#include<bits/stdc++.h>
using namespace std; const int maxn = ; double dp[maxn][maxn]; int main()
{
//freopen("in.txt","r",stdin);
int n; scanf("%d",&n);
n -= ; for(int i = ; i <= n; i++){
for(int j = i; j <=n; j++)
dp[i][j] = ;
} for(int i = ; i <= n; i++){
double e = ./i;
for(int j = ; j < i; j++){
dp[i][j] = dp[i][j-];
for(int k = ; k <= i; k++){
int l = k-,r = i-k;
double p1 = dp[l][j-] - dp[l][j-], p2 = dp[r][j-] - dp[r][j-];
double p3 = dp[l][j-];
double p4 = dp[r][j-];
dp[i][j] += e*(p1*p4 + p2*p3 - p2*p1);
}
}
}
double ans = ;
for(int i = ; i <= n; i++){
ans += (dp[n][i]-dp[n][i-])*i*;
}
printf("%.11lf\n",ans);
return ;
}

URAL 1776 Anniversary Firework (概率,区间DP)的更多相关文章

  1. UVA 10529 - Dumb Bones(概率+区间dp)

    UVA 10529 - Dumb Bones option=com_onlinejudge&Itemid=8&category=518&page=show_problem&am ...

  2. URAL 1776 C - Anniversary Firework DP

    C - Anniversary FireworkTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/c ...

  3. 树形DP URAL 1039 Anniversary Party

    题目传送门 /* 题意:上司在,员工不在,反之不一定.每一个人有一个权值,问权值和最大多少. 树形DP:把上司和员工的关系看成根节点和子节点的关系,两者有状态转移方程: dp[rt][0] += ma ...

  4. hdu 4412 Sky Soldiers(区间DP)

    Sky Soldiers Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  5. 【区间dp+组合数+数学期望】Expression

    https://www.bnuoj.com/v3/contest_show.php?cid=9148#problem/I [题意] 给定n个操作数和n-1个操作符,组成一个数学式子.每次可以选择两个相 ...

  6. poj2342 Anniversary party (树形dp)

    poj2342 Anniversary party (树形dp) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9128   ...

  7. 【BZOJ-4380】Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  8. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  9. 区间DP LightOJ 1422 Halloween Costumes

    http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...

随机推荐

  1. MPTCP in Wireshark(转)

    最新的wireshark可以直接识别出mptcp. Wireshark is a widely used network analyzer that can capture network traff ...

  2. c++函数模板1

    1 定义: 函数模板 只适用于参数个数相同但是类型不同 而且函数体相同的情况 2 这个例子没有使用模板的情况 #include <iostream> using namespace std ...

  3. 【Hadoop】HDFS笔记(一):Hadoop的RPC机制

    RPC(Remote Procedure Call, 远程过程调用)主要面对两个问题: 1.对象调用方式: 2.序列/反序列化机制. Hadoop实现的RPC组件依赖于Hadoop Writable类 ...

  4. C#基础:通过委托给任何对象数组进行排序

    在日常编写程序的时候,我们需要对一些对象进行排序,比如对int数组进行排序,自定义类数组进行排序,首先我们先讨论对数组进行排序,我们应该对冒泡排序比较熟悉,下面是数组用冒泡排序的方法 for (int ...

  5. 2016CCPC东北地区大学生程序设计竞赛

    吧啦啦啦啦啦啦啦啦啦啦啦能量,ACM,跨!变身!变成一个智障! http://blog.csdn.net/keyboarderqq/article/details/52743062

  6. Codeforces643A【一种暴力】

    mdzz,今天好烦啊,连特么暴力都不会写了. 题意是:给你n个数(<=n),然后让你求对于每个数输出含有他最多数量的区间数,还有如果存在相等的话,这个区间算小的那个 思路: 暴力起点,然后从小区 ...

  7. String.Format 大全

    0.0的格式化 string.Format("{0:8D8}", 3)//第一个8表示空8个位置,后一个8表示用0填写最多8位数据 1.格式化货币(跟系统的环境有关,中文系统默认格 ...

  8. ios wkwebview同步cookie ajax请求偶尔异常问题

    let config = WKWebViewConfiguration.init() config.preferences = WKPreferences.init() config.preferen ...

  9. mysql count 中使用case when 带条件及去重

    SELECT CASE (SELECT NOW() > '2019-02-12 16:48:00') WHEN 1 THEN '男' WHEN 2 THEN '女' ELSE '未知' END ...

  10. Thinking In Java持有对象阅读记录

    这里记录下一些之前不太了解的知识点,还有一些小细节吧 序 首先,为什么要有Containers来持有对象,直接用array不好吗?——数组是固定大小的,使用不方便,而且是只能持有一个类型的对象,但当你 ...