[dp 记录]abc263E Sugorroku3
值得一提的是,在数学期望递推、数学期望动态规划中,我们通常把终止状态作为初值,把起始状态作为目标,倒着进行计算。这是因为在很多情况下,起始状态是唯一的,而终止状态很多。根据数学期望的定义,若我们正着计算,则还需求出从起始状态到达每个终止状态的概率,与 值相乘才能得到答案,增加了难度,也容易出错。
——lyd《算进》
打完 vp 来补前几天的题
题意:站在 处,从 同等概率走向 ,求到达 步数期望。
首先这不能正推,因为分别到达每个地方的概率不是 。
设 表示从 走到 的步数期望,则:
用线段树维护区间和即可。
如果直接维护后缀数组,能做到 。
题不难,专门写出来只是为了提醒自己期望一定要倒推。清楚记得绿豆蛙的归宿一题,却因为没写过,忽略了这个常识。
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#define LL long long
using namespace std;
const int M = 200005, mod = 998244353;
int qpow(int a, int b){
long long ans = 1ll;
for(; b; b >>= 1) {if(b & 1) ans = 1ll * ans * a % mod; a = 1ll * a * a % mod;}
return ans;
}
int inv(int k) {return qpow(k, mod - 2);}
int addd(int a, int b) {a += b; return a > mod ? a-mod : a;}
int minus(int a, int b) {a -= b; return a < 0 ? a+mod : a;}
int a[M], n, op, l, r, m, f[M];
void add(int &x, int y) {x += y; if(x > mod) x -= mod;}
struct sg{
int s[M << 2];
void upd(int o, int l, int r, int x){
if(l == r) {s[o] = f[x]; return;}
int mid = l+r >> 1;
x <= mid ? upd(o<<1, l, mid, x) : upd(o<<1|1, mid+1, r, x);
s[o] = addd(s[o<<1], s[o<<1|1]);
}
int query(int o, int l, int r, int x, int y){
if(x <= l && r <= y) return s[o];
int mid = l + r >> 1; int ans = 0;
if(x <= mid) add(ans, query(o<<1, l, mid, x, y));
if(y > mid) add(ans, query(o<<1|1, mid+1, r, x, y));
return ans;
}
}t;
int main(){
scanf("%d", &n);
for(int i = 1; i < n; i++) scanf("%d", &a[i]);
for(int i = n-1; i >= 1; i--){
f[i] = addd(1ll * t.query(1, 1, n, i+1, i+a[i]) * inv(a[i]) % mod,
addd(1, inv(a[i]))
);
t.upd(1, 1, n, i);
}
printf("%d\n", f[1]);
}
作者:purplevine
出处:https://www.cnblogs.com/purplevine/p/16572026.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
本文来自博客园,作者:purplevine,转载请注明原文链接:https://www.cnblogs.com/purplevine/p/16572026.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端