码迷,mamicode.com
首页 > 其他好文 > 详细

换教室sol

时间:2020-07-30 19:42:09      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:main   https   name   ==   gis   def   begin   期望dp   ret   

换教室

  • 概率期望dp的模板题
  • 状态较好设计,转移的时候注意要把所有的可能性都考虑到并加起来
#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define SZ(x) ((int)x.size())
#define ALL(x) x.begin(),x.end()
#define U(i,u) for(register int i=head[u];i;i=nxt[i])
#define rep(i,a,b) for(register int i=(a);i<=(b);++i)
#define per(i,a,b) for(register int i=(a);i>=(b);--i)
using namespace std;
typedef long double ld;
typedef long long ll;
typedef unsigned int ui;
typedef pair<int,int> PII;
typedef vector<int> VI;
template<class T> inline void read(T &x){
	x=0;char c=getchar();int f=1;
	while(!isdigit(c)){if(c==‘-‘)f=-1;c=getchar();}
	while(isdigit(c)){x=x*10+c-‘0‘;c=getchar();}x*=f;
}
template<class T> inline void cmin(T &x, T y){x=x<y?x:y;}
template<class T> inline void cmax(T &x, T y){x=x>y?x:y;}
inline double xmin(double x, double y){return x<y?x:y;}
const int N=2010;
int n,m,cv,ce;
int c[N],d[N];
int g[N][N];
double p[N];
double f[N][N][2];
int main(){
	read(n);read(m);read(cv);read(ce);
	rep(i,1,n)read(c[i]);rep(i,1,n)read(d[i]);rep(i,1,n)scanf("%lf",&p[i]);
	memset(g,0x3f,sizeof(g));
	rep(i,1,ce){int x,y,z;read(x);read(y);read(z);g[x][y]=g[y][x]=min(g[x][y],z);}
	rep(i,1,cv)g[i][i]=0;
	rep(k,1,cv){
		rep(i,1,cv){
			rep(j,1,cv){
				if(g[i][j]>g[i][k]+g[k][j])
					g[i][j]=g[i][k]+g[k][j];
			}
		}
	}
	rep(i,1,cv)g[0][i]=g[i][0]=0;
	rep(i,0,n)rep(j,0,m)f[i][j][0]=f[i][j][1]=0x3f3f3f3f;
	f[1][1][1]=f[1][0][0]=0.0;
	rep(i,2,n){
		f[i][0][0]=f[i-1][0][0]+g[c[i-1]][c[i]];
		rep(j,1,min(i,m)){
			f[i][j][0]=xmin(f[i][j][0],xmin(f[i-1][j][1]+double(g[d[i-1]][c[i]])*p[i-1]+double(g[c[i-1]][c[i]])*(1-p[i-1]),f[i-1][j][0]+double(g[c[i-1]][c[i]])));
			f[i][j][1]=xmin(f[i][j][1],xmin(f[i-1][j-1][0]+double(g[c[i-1]][d[i]])*p[i]+double(g[c[i-1]][c[i]])*(1-p[i]),f[i-1][j-1][1]+double(g[c[i-1]][c[i]])*(1-p[i])*(1-p[i-1])+double(g[c[i-1]][d[i]])*p[i]*(1-p[i-1])+double(g[d[i-1]][c[i]])*p[i-1]*(1-p[i])+double(g[d[i-1]][d[i]])*p[i-1]*p[i]));
		}
	}
	double ans=0x3f3f3f3f;
	rep(i,0,m)ans=xmin(ans,xmin(f[n][i][0],f[n][i][1]));
	printf("%.2f",ans);
	return 0;
}
// xmin(f[i-1][j-1][0]+double(g[c[i-1]][d[i]])*p[i]+double(g[c[i-1]][c[i]])*(1-p[i]),
// 	 f[i-1][j-1][1]
// 	 +double(g[c[i-1]][c[i]])*(1-p[i])*(1-p[i-1])
// 	 +double(g[c[i-1]][d[i]])*p[i]*(1-p[i-1])
// 	 +double(g[d[i-1]][c[i]])*p[i-1]*(1-p[i])
// 	 +double(g[d[i-1][d[i]]])*p[i-1]*p[i])

换教室sol

标签:main   https   name   ==   gis   def   begin   期望dp   ret   

原文地址:https://www.cnblogs.com/hangzz/p/13405417.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!