洛谷 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;
}
posted @ 2021-09-05 11:02  尹昱钦  阅读(26)  评论(0编辑  收藏  举报