题意:
有n个人进行m次比赛,每次比赛有一个排名,最后的排名是把所有排名都加起来然后找到比自己的分数绝对小的人数加一就是最终排名。

给了其中一个人的所有比赛的名次。求这个人最终排名的期望。

思路:

渣渣的第一道概率DP...弱渣。

dp[i][j]代表进行了i轮比赛之后得分为j的人数的期望,可以知道dp[i][j]来自于dp[i-1][j-m...j-1]的期望的人数乘以概率。这里就是前缀和,用树状数组进行优化...

但是要注意,转移的时候一定要排除已经知道的名次的影响,不能用已知名次来转移...

这题卡了好多天...终于开窍...

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
double tree[];
double dp[];
int me[];//目标选手每场比赛的名次
int n,m;
int ss;//目标选手的名次和
double findans(int tar)
{
double sum=;
while(tar>)
{
sum+=tree[tar];
tar-=tar&(-tar);
}
return sum;
}
void updat(int tar,double num)
{
while(tar<ss)
{
tree[tar]+=num;
tar+=tar&(-tar);
}
}
int main()
{
scanf("%d%d",&n,&m);
memset(dp,,sizeof(dp));
memset(tree,,sizeof(tree));
ss=;
for(int i=;i<=n;i++)
{
scanf("%d",&me[i]);
ss+=me[i];
}
if(m==)
{printf("1.0000000000000000\n");return ;}
for(int j=;j<=m;j++)
{
dp[j]=;
}
dp[me[]]=;
for(int j=;j<ss;j++)
{
updat(j,dp[j]);
}
for(int i=;i<=n;i++)
{
memset(dp,,sizeof(dp));
for(int j=i;j<ss;j++)
{
int k;
dp[j]+=findans(j-)/(m-);
k=j-m-;
if(k>=i-)
dp[j]-=findans(k)/(m-);
if(j-i+>=me[i])
{
dp[j]-=findans(j-me[i])/(m-);
if(j-me[i]->=i-)
{
dp[j]+=findans(j-me[i]-)/(m-);
}
}
}
memset(tree,,sizeof(tree));
for(int j=i;j<ss;j++)
{
updat(j,dp[j]);
}
}
printf("%.16lf\n",findans(ss-)+);
}

CodeForces 602E【概率DP】【树状数组优化】的更多相关文章

  1. Codeforces 909 C. Python Indentation (DP+树状数组优化)

    题目链接:Python Indentation 题意: Python是没有大括号来标明语句块的,而是用严格的缩进来体现.现在有一种简化版的Python,只有两种语句: (1)'s'语句:Simple ...

  2. 2015南阳CCPC C - The Battle of Chibi DP树状数组优化

    C - The Battle of Chibi Description Cao Cao made up a big army and was going to invade the whole Sou ...

  3. 【eJOI2020】考试(dp & 树状数组优化)

    Description \(n\) 个正整数排成一列,每个位置 \(i\) 有一个初始值 \(A_i\) 以及目标值 \(B_i\). 一次操作可以选定一个区间 \([l, r]\),并将区间内所有数 ...

  4. bzoj 3594: [Scoi2014]方伯伯的玉米田 dp树状数组优化

    3594: [Scoi2014]方伯伯的玉米田 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 314  Solved: 132[Submit][Sta ...

  5. FZU2236 第十四个目标 dp+树状数组优化

    分析:这种题烂大街,n^2,然后数据结构优化下到nlogn,离散化 #include <cstdio> #include <cstring> #include <queu ...

  6. Codeforces 909C Python Indentation:树状数组优化dp

    题目链接:http://codeforces.com/contest/909/problem/C 题意: Python是没有大括号来标明语句块的,而是用严格的缩进来体现. 现在有一种简化版的Pytho ...

  7. Codeforces 946G Almost Increasing Array (树状数组优化DP)

    题目链接   Educational Codeforces Round 39 Problem G 题意  给定一个序列,求把他变成Almost Increasing Array需要改变的最小元素个数. ...

  8. Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)

    题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...

  9. CodeForces - 597C Subsequences 【DP + 树状数组】

    题目链接 http://codeforces.com/problemset/problem/597/C 题意 给出一个n 一个 k 求 n 个数中 长度为k的上升子序列 有多少个 思路 刚开始就是想用 ...

  10. BZOJ3594: [Scoi2014]方伯伯的玉米田【二维树状数组优化DP】

    Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美. 这排玉米一共有N株,它们的高度参差不齐. 方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感 ...

随机推荐

  1. js 实现返回上一页和刷新等页面跳转功能

    原文 出处http://www.2cto.com/kf/201111/109821.html 1. Javascript 返回上一页history.go(-1), 返回两个页面: history.go ...

  2. sqlserver修改某列为行号

    UPDATE t_users  SET t_users.id=u.num1 FROM t_users INNER JOIN (SELECT row_number() over(order by id) ...

  3. Innodb锁机制:Next-Key Lock 浅谈(转)

    http://www.cnblogs.com/zhoujinyi/p/3435982.html 数据库使用锁是为了支持更好的并发,提供数据的完整性和一致性.InnoDB是一个支持行锁的存储引擎,锁的类 ...

  4. 用php自带的filter函数验证、过滤数据 -转载

    PHP过滤器包含两种类型 Validation:用来验证验证项是否合法 Sanitization:用来格式化被验证的项目,因此它可能会修改验证项的值,将不合法的字符删除等. input_filters ...

  5. eclipse打包jar文件(含外部jar包)的方法

    在项目发布前,使用eclipse导出普通的jar包时,如果配置不好,在运行命令Java -jar /test.jar 时可能会出现如下三类错误信息: 1.no main manifest attrib ...

  6. jQuery图片无缝滚动JS代码ul/li结构

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. [Hibernate] - Annotations - Many To Many

    Hibernate annotation 多对多: 下面测试例子会自动生成一张表:card,这张是bank和user表的映射表.里头是bank_id和user_id两个组合字段. 如果想在这张映射表中 ...

  8. LeetCode "Binary Tree Vertical Order"

    BFS + HashTable class Solution { int maxl, minl; unordered_map<int, vector<int>> hm; pub ...

  9. 【转】String.format详解

    一.前言 String.format 作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 String.format("Hello %s", " ...

  10. Python 通过print将数据保存到文件中

    1. Print them to screen man = [] other = [] try: data = open('sketch.txt') for each_line in data: tr ...