题意:

最低等级\(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)题解相关推荐

  1. HDU 6656 Kejin Player (期望DP 逆元)

    2019 杭电多校 7 1011 题目链接:HDU 6656 比赛链接:2019 Multi-University Training Contest 7 Problem Description Cub ...

  2. 2019杭电多校第七场 HDU - 6656 Kejin Player——概率期望

    题意 总共有 $n$ 层楼,在第 $i$ 层花费 $a_i$ 的代价,有 $pi$ 的概率到 $i+1$ 层,否则到 $x_i$($x_i \leq 1$) 层.接下来有 $q$ 次询问,每次询问 $ ...

  3. 2019杭电多校第七场 HDU - 6656 Kejin Player 期望

    题目链接:https://vjudge.net/problem/HDU-6656 题解: 维护一个前缀sum[i] : 从1到 i 的期望 第 i 到达 i + 1是:ai + (1 - r[i] / ...

  4. HDU 6656 Kejin Player

    hdu题面 Time limit 5000 ms Memory limit 524288 kB OS Windows 解题思路 因为升级只能一级一级地升,所以所求期望满足了区间加的性质,可以一级一级地 ...

  5. HDU 6656 Kejin Player(期望)

    题目传送门 Problem Description Cuber QQ always envies those Kejin players, who pay a lot of RMB to get a ...

  6. hdu多校第七场 1011 (hdu6656) Kejin Player 概率dp

    题意: 一个游戏,有许多关,到下一关要花费金钱,做出尝试,有概率成功,若成功则到达下一关,若失败则停在此关或退回到前面某关,询问第l关到第r关的期望费用 题解: 显然,第r关到第l关的费用是dp[r] ...

  7. 杭电多校 HDU 6641 TDL

    题意:给出一个公式 和公式上的m,k试着求是否有n可以符合上面的公式,若有这输出,没有这输出-1 思路: 1.对于f(n,m)因为与n互质的数很大所以求f(n,m)的时间复杂度并不是很高 2.对于给出 ...

  8. 2019 杭电多校 HDU - 6625 three arrays 字典树+贪心

    题目链接:https://cn.vjudge.net/problem/HDU-6625 题意:a和b两个数组n个数,数字任意组合异或,求得到c数组的字典序最小 题解:对于两个数组从高位到低位建立两个字 ...

  9. 2022杭电多校(一)

    2022杭电多校(一) 文章目录 2022杭电多校(一) 一.比赛小结 二.题目分析及解法(基础题) 1001.String 1002.Dragon slayer 1003.BackPack 1004 ...

  10. 杭电多校第七场 1011 Kejin Player HDU(6656)

    杭电多校第七场 1011 Kejin Player 题意:给你N行,代表从i级有花费a[i]元的r[i]/s[i]的概率达到i+1级,剩下的概率中可能会到达x[i]级.然后询问从L级到R级的花费会是多 ...

最新文章

  1. 静态路由_【零基础学云计算】静态路由!静态路由!静态路由!原理与配置
  2. 简单两步使用node发送qq邮件
  3. 局域网伪造源地址DDoS***解决方法
  4. 关于yarn的一些心得
  5. 数据结构--二叉树的创建和相关操作
  6. python写表格_使用Python对Excel进行读写操作
  7. java 遍历写什么_Java文件遍历及文件读写
  8. 可以使任何人获得管理员权限的Windows 10系统漏洞
  9. 数学建模感悟:新的算法的学习
  10. 怎么在搭建Android开发环境?
  11. Struts2中的OGNL详解
  12. 阿里P8架构师谈:高并发网站的监控系统选型、比较、核心监控指标
  13. Collections带有的排序方法 传入的元素类型 需是子类或者这个类的实例
  14. STL里面的sort()函数使用结构体
  15. error40无法打开到sql_SQL-mysql游标与触发器
  16. “做实体店,已经是绝路了吗?”
  17. 如何实现自动化前端开发?
  18. Android SeekBar和RatingBar示例教程
  19. 关于时间、日期的一些应用
  20. PC端哔哩哔哩动画下载的本地视频无法打开

热门文章

  1. 第10组17通信三班228网络协议抓包分析
  2. Spring IoC 的实现机制
  3. 更新:第6章已上线!最酷的程序员应该知道的【LLVM】!
  4. Flutter实战:手把手教你写Flutter Plugin
  5. 【好书试读】Docker全攻略
  6. UltimateAndroid快速开发框架教程
  7. 6月第二周国内域名解析商Top10:万网份额突破21%
  8. 简繁体在线切换JS插件
  9. 辣鸡,你怎么天天就会 try...catch ?试试这个
  10. 不要为了“分库分表”而“分库分表”!