• 换教室sol


    换教室

    • 概率期望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])
    
  • 相关阅读:
    deque-size
    deque-size
    deque-resize
    Android4.4——SurfaceFlinger启动
    关于linux signal 6 (SIGABRT)
    (OK) 编译ANDROID
    compile android: depmod: ERROR: Found 2 modules in dependency cycles!
    Fedora 25正式发布:工作站版默认启用Wayland显示服务器
    running ANDROID
    (3/4 OK) 在VirtualBox中运行 cm-13-kiwi (华为 荣耀 5X)
  • 原文地址:https://www.cnblogs.com/hangzz/p/13405417.html
Copyright © 2020-2023  润新知