洛谷 P6835 [Cnoi2020]线形生物(期望dp)
传送门
解题思路
洛谷第一篇题解写的非常清楚
总结一下关键点,在图上求类似的期望步数,通常设计状态为dp[i]表示从i号点走到i+1号点的期望步数。
AC代码
#include<cstdio>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=1e6+5;
const int mod=998244353;
int n,m,du[maxn],dp[maxn],sum[maxn];
vector<int> e[maxn];
int main(){
ios::sync_with_stdio(false);
cin>>n>>n>>m;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
e[u].push_back(v);
du[u]++;
}
for(int i=1;i<=n;i++){
dp[i]=du[i]+1;
for(int j=0;j<du[i];j++){
dp[i]=((dp[i]+sum[i-1]-sum[e[i][j]-1])%mod+mod)%mod;
}
sum[i]=(sum[i-1]+dp[i])%mod;
}
cout<<sum[n]%mod;
return 0;
}