概述
题目概述
题目太虐狗,我直接搬了……
游乐园被描述成一张
n
个点,
解题报告
哇,直接用期望的线性性就行了啊!这道题应该是比较典型的期望DP,但是如果直接推会发现无从下手。
再观察一下,与
所以我们倒过来处理就行了。
示例程序
#include<cstdio>
using namespace std;
typedef double DB;
const int maxn=100,maxm=10000,maxk=480;
int n,m,K,c[maxn+5],a[maxn+5],b[maxn+5];
int E,lnk[maxn+5],son[maxm+5],nxt[maxm+5],w[maxm+5];
DB f[maxn+5][maxk+5],g[maxn+5][maxk+5],ansA,ansB;
inline void Add(int x,int y,int z) {son[++E]=y;w[E]=z;nxt[E]=lnk[x];lnk[x]=E;}
int main()
{
freopen("B.in","r",stdin);
freopen("B.out","w",stdout);
scanf("%d%d%d",&n,&m,&K);
for (int i=1;i<=n;i++) scanf("%d%d%d",&c[i],&a[i],&b[i]);
for (int i=1,x,y,z;i<=m;i++) scanf("%d%d%d",&x,&y,&z),Add(x,y,z),Add(y,x,z);
for (int k=K;k>=0;k--)
for (int i=1;i<=n;i++)
{
int num=0;for (int j=lnk[i];j;j=nxt[j]) num+=(k+w[j]+c[son[j]]<=K);
f[i][k]=a[i];g[i][k]=b[i];
for (int j=lnk[i],t;j;j=nxt[j]) if ((t=k+w[j]+c[son[j]])<=K)
f[i][k]+=f[son[j]][t]/num,g[i][k]+=g[son[j]][t]/num;
}
for (int i=1;i<=n;i++) ansA+=f[i][c[i]]/n,ansB+=g[i][c[i]]/n;
return printf("%.5lf %.5lfn",ansA,ansB),0;
}
最后
以上就是无私外套为你收集整理的【期望DP】LibreOJ6178(美团 CodeM 初赛 Round B)[景区路线规划]题解的全部内容,希望文章能够帮你解决【期望DP】LibreOJ6178(美团 CodeM 初赛 Round B)[景区路线规划]题解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复