Codeforces Round #284 (Div. 1) B. Name That Tune(概率DP)(难)
1 second
256 megabytes
standard input
standard output
It turns out that you are a great fan of rock band AC/PE. Peter learned that and started the following game: he plays the first song of the list of n songs
of the group, and you have to find out the name of the song. After you tell the song name, Peter immediately plays the following song in order, and so on.
The i-th song of AC/PE has its recognizability pi.
This means that if the song has not yet been recognized by you, you listen to it for exactly one more second and with probability of pi percent
you recognize it and tell it's name. Otherwise you continue listening it. Note that you can only try to guess it only when it is integer number of seconds after the moment the song starts playing.
In all AC/PE songs the first words of chorus are the same as the title, so when you've heard the first ti seconds
of i-th song and its chorus starts, you immediately guess its name for sure.
For example, in the song Highway To Red the chorus sounds pretty late, but the song has high recognizability. In the song Back In Blue, on the other hand, the words from the title sound close to the beginning of the song, but it's hard to name it before hearing
those words. You can name both of these songs during a few more first seconds.
Determine the expected number songs of you will recognize if the game lasts for exactly T seconds (i. e. you can make the last guess
on the second T, after that the game stops).
If all songs are recognized faster than in T seconds, the game stops after
the last song is recognized.
The first line of the input contains numbers n and T (1 ≤ n ≤ 5000, 1 ≤ T ≤ 5000),
separated by a space. Next n lines contain pairs of numbers pi and ti (0 ≤ pi ≤ 100, 1 ≤ ti ≤ T).
The songs are given in the same order as in Petya's list.
Output a single number — the expected number of the number of songs you will recognize in T seconds. Your answer will be considered
correct if its absolute or relative error does not exceed 10 - 6.
2 2
50 2
10 1
1.500000000
2 2
0 2
100 2
1.000000000
3 3
50 3
50 2
25 2
1.687500000
2 2
0 2
0 2
1.000000000
大致题意:听歌识曲,有n首歌,每首歌有ti的时间供你猜,当到ti时就会播放歌曲名所以必定会猜中,除了ti秒以外,其它每s猜中的概率是p,求Ts后猜中的歌曲个数的期望
我们设dp[i][j]表示猜到第i首歌,所用时间恰好为j的概率。
如果第i首歌识别的概率是pi。最多所用次数为ti。
如今我们识别第i首歌所用总时间恰好为j,那么其可能是dp[i-1][j-ti],dp[i-1][j-ti+1],......,dp[i-1][j-1]转移过来的。
显然暴力dp的复杂度是O(n^3)会T,所以进一步优化,dp[i][j]可由dp[i][j-1] O(1)推得
期望等于每首歌被猜中的概率之和
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std; const int N =5e3+100;
int n,T;
double dp[N][N];
double p[N];
int t[N]; int main()
{
cin>>n>>T;
for(int i=1;i<=n;i++) cin>>p[i],p[i]=p[i]/100,cin>>t[i];
dp[0][0]=1;
double ans=0;
for(int i=0;i<=n;i++)
{
double pp1,pp2;
if(i>0&&t[i]>2) pp1=pow(1-p[i],1.0*(t[i]-2));
pp2=pow(1-p[i+1],t[i+1]-1);
for(int j=0;j<=T;j++)
{
if(dp[i][j]==0) continue;
if(i>0&&t[i]>2)
{
double tmp=dp[i][j];
if(j>=t[i]) tmp-=dp[i-1][j-t[i]]*pp1*(1-p[i]);
if(j>=t[i]-1) tmp-=dp[i-1][j-t[i]+1]*pp1*p[i];
dp[i][j+1]+=tmp*(1-p[i]);
}
if(j+1<=T&&t[i+1]>1) dp[i+1][j+1]+=dp[i][j]*p[i+1];
if(j+t[i+1]<=T)dp[i+1][j+t[i+1]]+=dp[i][j]*pp2;
if(i>0) ans+=dp[i][j];
}
}
printf("%.10f\n",ans);
}
Codeforces Round #284 (Div. 1) B. Name That Tune(概率DP)(难)的更多相关文章
- Codeforces Round #284 (Div. 2) D. Name That Tune [概率dp]
D. Name That Tune time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- Codeforces Round #301 (Div. 2) D. Bad Luck Island 概率DP
D. Bad Luck Island Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/540/pr ...
- Codeforces Round #105 (Div. 2) D. Bag of mice 概率dp
题目链接: http://codeforces.com/problemset/problem/148/D D. Bag of mice time limit per test2 secondsmemo ...
- Codeforces Round #293 (Div. 2) D. Ilya and Escalator 概率DP
D. Ilya and Escalator time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- Codeforces Round #233 (Div. 2)D. Painting The Wall 概率DP
D. Painting The Wall ...
- Codeforces Round #597 (Div. 2) E. Hyakugoku and Ladders 概率dp
E. Hyakugoku and Ladders Hyakugoku has just retired from being the resident deity of the South Black ...
- Codeforces Round #267 (Div. 2) C. George and Job(DP)补题
Codeforces Round #267 (Div. 2) C. George and Job题目链接请点击~ The new ITone 6 has been released recently ...
- Codeforces Round #284 (Div. 2)A B C 模拟 数学
A. Watching a movie time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces Round #284 (Div. 2)
题目链接:http://codeforces.com/contest/499 A. Watching a movie You have decided to watch the best moment ...
随机推荐
- 2017-3-10 leetcode 229 238 268
今天登陆leetcode突然发现531被锁了,有种占了便宜的感觉哈哈哈! ================================================ leetcode229 Ma ...
- php递归取目录下的所有文件(原创)
function get_dir_all_files($path) { $result=array(); $temp=array(); if(filetype($path)=='dir') { $di ...
- mvc 伪静态任意扩展名的实现方法
比如:要实现 http://localhost:60291/home/geta/1212.html 或者 .abc 任意扩展名 完成两步即可. 第一步修改路由: public static void ...
- week1 notebook1
初识Python 一.python介绍 - 解释器: cpython(默认使用) ipython(shell) jpython(java) ironpython rubypython - 编码: as ...
- 小程序-wx:for
wx:for (列表渲染) index默认数组下标item默认数组当前项的变量名 数组是对象的形式,单纯写{{item}},结果是[object object]的形式,必须加对象名,并且对象名基本设置 ...
- hihoCoder挑战赛31
#1595 : Numbers 时间限制:8000ms 单点时限:1000ms 内存限制:256MB 描述 给定n个整数常数c[1], c[2], ..., c[n]和一个整数k.现在需要给2k个整数 ...
- 检索源码 删除无用Properties的小工具
背景: 重新做项目的过程中,引用了大量旧代码.尤其是Properties文件,里面肯定有一批是无用的,干脆笨办法直接扫描源码文件来过滤. 后续在此基础上修改修改,再做个扫描无用image文件的类. 代 ...
- html img加载不同大小图像速度
最近要想法提高网页的性能,在查看图片加载时,产生了试验的想法.一直以来都没有太去深究,还是挖掘一下的好. 很简单的试验,<img>加载两个图像,一个2.3MB,5000*5000,一个22 ...
- Difference between == and ===
In swift 3 and above === (or !==) Checks if the values are identical (both point to the same memory ...
- 微信App支付:微信支付的appid,appsecret,商户号mch_id,微信交易支付密钥(mch_key)在哪里查看
1-1) 查看微信支付 appid 的方法 微信支付使用的 appid, 是微信服务号的 appid, 需要你登录微信服务号后台, 在 开发-基本配置/开发者ID(AppID) 中查看微信支付 app ...