bzoj 2306 幸福路径 【floyd】【dp】

原创 2015年11月20日 22:57:47

期望值最大的dp,转移有环

开始在想强连通分量缩点之后,块内高斯消元+拓扑图dp。

但是高斯消元没有max的转移。

所以用了处理有环最大值的方法:floyd

总结一下:

处理转移有环的方法:

最短路(单源 floyd)主要是求max/min

高斯消元 主要是求期望。

强连通分量缩点 主要是题内有明显提示或强连通分量内部有特殊性质。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>

#define ll long long
#define inf 1e9
#define eps 1e-10
#define md
#define N 110
using namespace std;
double w[N],f[N][N],g[N][N];
int a[N][N];
int main()
{
	int n,m,S;
	double p; 
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++) scanf("%lf",&w[i]);
	scanf("%d%lf",&S,&p);
	n++;
	for (int i=1;i<=n;i++)
	  for (int j=1;j<=n;j++)
	    g[i][j]=-inf;
	for (int i=1;i<=m;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		a[x][y]=1; g[x][y]=w[y]*p;
	}
	w[n]=0;
	for (int i=1;i<=n;i++) g[i][n]=0;
	for (int t=1;t<=50;t++,p*=p)
	{
		for (int i=1;i<=n;i++)
		  for (int j=1;j<=n;j++)
		    f[i][j]=-inf;
		for (int k=1;k<=n;k++)
		  for (int i=1;i<=n;i++)
		    for (int j=1;j<=n;j++)
		      f[i][j]=max(f[i][j],g[i][k]+g[k][j]*p);
		memcpy(g,f,sizeof(f));
		//printf("%.2lf : %.2lf %.2lf %.2lf\n",p,g[1][2],g[1][3],g[1][4]);
	}
	double ans=-inf;
	for (int i=1;i<=n;i++)
	    ans=max(ans,f[S][i]);
	printf("%.1lf\n",ans+w[S]);
	return 0;
}



bzoj 2306: [Ctsc2011]幸福路径 倍增+floyed

这道题果然是倍增卡精度。。。。        首先可以得到走2^k步时,f[i][j]表示i~j的最大收益;那么第2^(k+1)步就有f[i][j]=min{f[i][k]+f[k][j]*ρ^(2^...
  • lych_cys
  • lych_cys
  • 2016年04月16日 08:21
  • 586

BZOJ 2306 Ctsc2011 幸福路径 倍增Floyd

题目大意:给定一张有向图,每个点有权值,蚂蚁从某个节点出发,初始体力值为1,每走一条边体力值*=p,每经过一个点会获得幸福值为点权*体力值,求最大幸福值 令f[i][j][t]为从点i走到点j花2^...
  • PoPoQQQ
  • PoPoQQQ
  • 2015年02月24日 19:18
  • 1832

[bzoj]2306: [Ctsc2011]幸福路径

这道题用倍增+floyd。 令f[i][j][t]表示从i到j走2^t步的最大值。 就有f[i][j][t]=max{f[i][k][t-1]+f[k][j][t-1]*p^(2^t)} 在...
  • qq_33208960
  • qq_33208960
  • 2017年06月04日 21:06
  • 130

bzoj 2306: [Ctsc2011]幸福路径

倍增floyd
  • herobrine_tkj
  • herobrine_tkj
  • 2017年09月10日 16:28
  • 118

BZOJ 2306: [Ctsc2011]幸福路径

虽说是无限长的路 可是随着p的减小 就不会影响到答案了 所以就跑倍增floyd 精度还真是个玄学的东西QAQ...
  • cgh_Andy
  • cgh_Andy
  • 2017年04月10日 16:39
  • 326

2306: [Ctsc2011]幸福路径

1
  • Mmh2000
  • Mmh2000
  • 2017年08月02日 23:26
  • 91

BZOJ 2306 [Ctsc2011] 幸福路径 [倍增+floyd做法]

倍增+floyd
  • SenyeLicone
  • SenyeLicone
  • 2017年05月17日 22:39
  • 199

BZOJ 2306 [Ctsc2011] 幸福路径 [期望DP做法]

期望DP
  • SenyeLicone
  • SenyeLicone
  • 2017年05月17日 22:43
  • 231

HDU 1385 Minimum Transport Cost (Floyd算法 + 路径输出)

/** * Floyd + 路径输出 : * 挺裸的一题求两顶点最多路。 除了要注意当路径有多条具有相同最短路径的时候, * 按字典序输出。。 * 这题挺坑的: 首先数据坑,...
  • xuruoxin
  • xuruoxin
  • 2013年08月11日 14:51
  • 1986

Floyd-算法的最短路径保存问题

Floyd 算法思想和编写代码都比较简单,不重复,只是我在理解 Floyd 如何保存找到的各个点之间的最短路劲时候理解了较久时间,做个笔记。 Floyd 算法模板如下: void floyd(in...
  • start0609
  • start0609
  • 2012年07月24日 11:42
  • 2873
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:bzoj 2306 幸福路径 【floyd】【dp】
举报原因:
原因补充:

(最多只允许输入30个字)