杭电多校HDU 6656 Kejin Player(概率DP)题解
题意:
最低等级\(level\ 1\),已知在\(level\ i\)操作一次需花费\(a_i\),有概率\(p_i\)升级到\(level\ i+1\),有\(1 - p_i\)掉级到\(x_i(x_i <= i)\),询问\(q\)次,问你每次从\(l\)升级到\(r\)的花费的期望。
思路:
我们设\(dp[i]\)为从\(1\)升级到\(i\)的期望花费,那么显然有从\(l\)升级到\(r\)的期望花费为\(dp[r] - dp[l]\)。
然后我们可以知道,升级到\(i\)有两种情况:
已经花费了\(dp[i-1]\)必加。从\(i-1\)升级,那么花费\(a_{i-1}\);掉级到\(x_{i-1}\)再升到\(i\),那么花费\(a_{i-1} + dp[i]-dp[x_{i-1}]\),那么可以列出方程:
\[dp[i] = dp[i -1] + p_{i-1}*a_{i-1} + (1-p_{i-1})*(dp[i]-dp[x_{i-1}]+a_{i-1})\]
化简后可得正解。
代码:
#include<map>
#include<set>
#include<queue>
#include<cmath>
#include<stack>
#include<ctime>
#include<vector>
#include<cstdio>
#include<cstring>
#include<string>
#include<sstream>
#include<iostream>
#include<algorithm>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const int maxn = 5e5 + 5;
const ll MOD = 1e9+7;
const ull seed = 13131;
const int INF = 998244353;
ll dp[maxn];
ll r[maxn], s[maxn], x[maxn], a[maxn];
ll ppow(ll a, ll b){ll ret = 1;while(b){if(b & 1) ret = ret * a % MOD;b >>= 1;a = a * a % MOD;}return ret;
}
int main(){int T;scanf("%d", &T);while(T--){int n, q;scanf("%d%d", &n, &q);for(int i = 1; i <= n; i++){scanf("%lld%lld%lld%lld", &r[i], &s[i], &x[i], &a[i]);}dp[1] = 0;for(int i = 2; i <= n + 1; i++){ll inv = ppow(r[i - 1], MOD - 2);ll tmp1 = ((s[i - 1] * inv % MOD) * dp[i - 1] + a[i - 1]) % MOD;ll tmp2 = ((s[i - 1] - r[i - 1]) * inv % MOD) * dp[x[i - 1]] % MOD;ll tmp3 = ((s[i - 1] - r[i - 1]) * inv % MOD) * a[i - 1] % MOD;dp[i] = ((tmp1 - tmp2) % MOD + tmp3) % MOD;dp[i] = (dp[i] % MOD + MOD) % MOD;}
// for(int i = 1; i <= n + 1; i++) printf("%lld\n", dp[i]);while(q--){int l, r;scanf("%d%d", &l, &r);ll ans = dp[r] - dp[l];ans = (ans % MOD + MOD) % MOD;printf("%lld\n", ans);}}return 0;
}
转载于:https://www.cnblogs.com/KirinSB/p/11342107.html
杭电多校HDU 6656 Kejin Player(概率DP)题解相关推荐
- HDU 6656 Kejin Player (期望DP 逆元)
2019 杭电多校 7 1011 题目链接:HDU 6656 比赛链接:2019 Multi-University Training Contest 7 Problem Description Cub ...
- 2019杭电多校第七场 HDU - 6656 Kejin Player——概率期望
题意 总共有 $n$ 层楼,在第 $i$ 层花费 $a_i$ 的代价,有 $pi$ 的概率到 $i+1$ 层,否则到 $x_i$($x_i \leq 1$) 层.接下来有 $q$ 次询问,每次询问 $ ...
- 2019杭电多校第七场 HDU - 6656 Kejin Player 期望
题目链接:https://vjudge.net/problem/HDU-6656 题解: 维护一个前缀sum[i] : 从1到 i 的期望 第 i 到达 i + 1是:ai + (1 - r[i] / ...
- HDU 6656 Kejin Player
hdu题面 Time limit 5000 ms Memory limit 524288 kB OS Windows 解题思路 因为升级只能一级一级地升,所以所求期望满足了区间加的性质,可以一级一级地 ...
- HDU 6656 Kejin Player(期望)
题目传送门 Problem Description Cuber QQ always envies those Kejin players, who pay a lot of RMB to get a ...
- hdu多校第七场 1011 (hdu6656) Kejin Player 概率dp
题意: 一个游戏,有许多关,到下一关要花费金钱,做出尝试,有概率成功,若成功则到达下一关,若失败则停在此关或退回到前面某关,询问第l关到第r关的期望费用 题解: 显然,第r关到第l关的费用是dp[r] ...
- 杭电多校 HDU 6641 TDL
题意:给出一个公式 和公式上的m,k试着求是否有n可以符合上面的公式,若有这输出,没有这输出-1 思路: 1.对于f(n,m)因为与n互质的数很大所以求f(n,m)的时间复杂度并不是很高 2.对于给出 ...
- 2019 杭电多校 HDU - 6625 three arrays 字典树+贪心
题目链接:https://cn.vjudge.net/problem/HDU-6625 题意:a和b两个数组n个数,数字任意组合异或,求得到c数组的字典序最小 题解:对于两个数组从高位到低位建立两个字 ...
- 2022杭电多校(一)
2022杭电多校(一) 文章目录 2022杭电多校(一) 一.比赛小结 二.题目分析及解法(基础题) 1001.String 1002.Dragon slayer 1003.BackPack 1004 ...
- 杭电多校第七场 1011 Kejin Player HDU(6656)
杭电多校第七场 1011 Kejin Player 题意:给你N行,代表从i级有花费a[i]元的r[i]/s[i]的概率达到i+1级,剩下的概率中可能会到达x[i]级.然后询问从L级到R级的花费会是多 ...
最新文章
- 静态路由_【零基础学云计算】静态路由!静态路由!静态路由!原理与配置
- 简单两步使用node发送qq邮件
- 局域网伪造源地址DDoS***解决方法
- 关于yarn的一些心得
- 数据结构--二叉树的创建和相关操作
- python写表格_使用Python对Excel进行读写操作
- java 遍历写什么_Java文件遍历及文件读写
- 可以使任何人获得管理员权限的Windows 10系统漏洞
- 数学建模感悟:新的算法的学习
- 怎么在搭建Android开发环境?
- Struts2中的OGNL详解
- 阿里P8架构师谈:高并发网站的监控系统选型、比较、核心监控指标
- Collections带有的排序方法 传入的元素类型 需是子类或者这个类的实例
- STL里面的sort()函数使用结构体
- error40无法打开到sql_SQL-mysql游标与触发器
- “做实体店,已经是绝路了吗?”
- 如何实现自动化前端开发?
- Android SeekBar和RatingBar示例教程
- 关于时间、日期的一些应用
- PC端哔哩哔哩动画下载的本地视频无法打开
热门文章
- 第10组17通信三班228网络协议抓包分析
- Spring IoC 的实现机制
- 更新:第6章已上线!最酷的程序员应该知道的【LLVM】!
- Flutter实战:手把手教你写Flutter Plugin
- 【好书试读】Docker全攻略
- UltimateAndroid快速开发框架教程
- 6月第二周国内域名解析商Top10:万网份额突破21%
- 简繁体在线切换JS插件
- 辣鸡,你怎么天天就会 try...catch ?试试这个
- 不要为了“分库分表”而“分库分表”!