博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杭电多校HDU 6656 Kejin Player(概率DP)题解
阅读量:4921 次
发布时间:2019-06-11

本文共 1770 字,大约阅读时间需要 5 分钟。

题意:

最低等级\(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#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
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

你可能感兴趣的文章
.net core 使用阿里云短信发送SMS
查看>>
Unity5.1 新的网络引擎UNET(四) UNET Remote Actions
查看>>
How to get service execuable path
查看>>
39岁了,我依旧要谈梦想
查看>>
java的IO流初探
查看>>
反射实现java深度克隆
查看>>
转载 Javascript DOM Document|Element|Attribute对象方法详解
查看>>
图书助手冲刺第六天
查看>>
需求评审
查看>>
Calculate the distance between two lines in 3D space
查看>>
观察者模式(发布-订阅模式)
查看>>
HDU 1069 Monkey and Banana(DP)
查看>>
HDU 2577 How to Type(杭电300题纪念)
查看>>
CS224n学习笔记(二)
查看>>
pymysql模块
查看>>
面向对象chapter7
查看>>
关于gcc、glibc和binutils模块之间的关系
查看>>
NB的新技术
查看>>
让vim能完成代码提示~~
查看>>
【Android】java.lang.StackOverflowError: stack size 8MB
查看>>