noip2016 换教室 概率+dp

非常好的dp,继续加油练习dp啊

#include<bits/stdc++.h>
#define rep(i,x,y) for(register int i=x;i<=y;i++)

using namespace std;

const int N=2e3+50;
const double inf=1e8+5;
const int V=305;
int n,m,v,e,c[N],d[N],g[V][V];
double k[N],f[N][N][2],ans;

inline int read(){
    int x=0,f=1;char ch=getchar();
    while(!isdigit(ch)){if(ch==‘-‘)f=-1;ch=getchar();}
    while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    return x*f;}

int main(){
    n=read(),m=read(),v=read(),e=read();
    rep(i,1,n) c[i]=read();
    rep(i,1,n) d[i]=read();
    rep(i,1,n) cin>>k[i];
    memset(g,63,sizeof g);
    rep(i,1,e){
        int u=read(),v=read(),w=read();
        g[u][v]=g[v][u]=min(g[u][v],w);}
    rep(k,1,v)rep(i,1,v)rep(j,1,v)
        g[i][j]=min(g[i][k]+g[k][j],g[i][j]);
    rep(i,1,v) g[i][i]=g[i][0]=g[0][i]=0;
    rep(i,0,n)rep(j,0,m) f[i][j][0]=f[i][j][1]=inf;
    f[1][0][0]=f[1][1][1]=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)){
            int k1=c[i-1],k2=d[i-1],k3=c[i],k4=d[i];
            f[i][j][0]=min(f[i][j][0],f[i-1][j][0]+g[k1][k3]);
            f[i][j][0]=min(f[i][j][0],f[i-1][j][1]+g[k1][k3]*(1-k[i-1])+g[k2][k3]*k[i-1]);
            f[i][j][1]=min(f[i][j][1],f[i-1][j-1][0]+g[k1][k3]*(1-k[i])+g[k1][k4]*k[i]);
            f[i][j][1]=min(f[i][j][1],f[i-1][j-1][1]+g[k1][k3]*(1-k[i-1])*(1-k[i])+g[k2][k3]*k[i-1]*(1-k[i])+g[k1][k4]*(1-k[i-1])*k[i]+g[k2][k4]*k[i-1]*k[i]);
        }
    }ans=inf;
    rep(i,0,m)ans=min(ans,min(f[n][i][0],f[n][i][1]));
    printf("%.2lf\n",ans);return 0;
}

怀挺,下一个

原文地址:https://www.cnblogs.com/asdic/p/9736925.html

时间: 2024-10-07 02:05:01

noip2016 换教室 概率+dp的相关文章

【niop2016】【luogu1600】换教室[概率dp]

luogu1600 假设{ Bn | n = 1, 2, 3, ... } 是一个概率空间的有限或者可数无限的分割,且每 个集合 Bn 是一个可测集合,则对任意事件 A 有全概率公式: 一下来自  贼清晰!简直是一朵清奇的白莲花 f[i][j][0/1]表示前i个时间点,共申请了j次,第i个时间点否/是进行了申请. dis[a][b]表示a教室->b教室的距离 c[i]表示默认的教室 d[i]表示更换后的教室 k[i]表示第i个教室申请成功的概率 分类讨论主要分成两大类,4小类,最后分成9个小项

P1850 换教室 概率dp

其实说是概率dp,本质上和dp没什么区别,就是把所有可能转移的情况全枚举一下就行了,不过dp方程确实有点长... ps:这个题的floyed我竟然之前写跪了... 题目: 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n2n 节课程安排在 nnn 个时间段上.在第 iii(1≤i≤n1 \leq i \leq n1≤i≤n)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室 cic_ici? 上课

bzoj4720 换教室 概率dp

链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4720 重述题意:有n节课,每节课有两个教室同时授课,可以改变m次教室,每次改变有独立的成功率,每次交换教室需要消耗一定体力,求出最低期望消耗体力.(教室数量<=200) 我们可以观察到,教室数量很少,而每次我们都需要处理出两个教室之间的距离,涉及到多个源点,因此我们选择floyd预处理每两个教室之间距离,这是O(n3)的枚举. 随后,我们对每一个状态进行动态规划.设数组f[i][j][k]为

JZYZOJ1457 [NOIP2016]换教室 期望dp 动态规划 floyd算法 最短路

http://172.20.6.3/Problem_Show.asp?id=1457 我不知道为什么我倒着推期望只有80分,所以我妥协了,我对着题解写了个正的,我有罪. 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 #include<iostream> 6 #include<queue> 7 using namespac

[NOIP2016]换教室 D1 T3 Floyed+期望DP

[NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 i ( 1≤ i≤n)个时同段上, 两节内容相同的课程同时在不同的地点进行, 其中, 牛牛预先被安排在教室 ci上课, 而另一节课程在教室 di进行. 在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的n节安排好的课程.如果学生想更换第i节课程的教室,则需要提出中情.若申请通过,学生

BZOJ 4720 [Noip2016]换教室

4720: [Noip2016]换教室 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室ci上课,而另一节课程在教室di进行.在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的n节安排好的课程.如果学生想更换第i节课程的教室,则需要提出申请.若申请通过,学生就可以在第i个时间段去教室

[NOIP2016]换教室 题解(奇怪的三种状态)

2558. [NOIP2016]换教室 [题目描述] 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1<i<n)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室ci上课,而另一节课程在教室di进行. 在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的n节安排好的课程.如果学生想更换第i节课程的教室,则需要提出申请.若申请通过,学生就可以在第i个时间段去教室di

Luogu P1850 换教室(期望dp)

P1850 换教室 题意 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有\(2n\)节课程安排在\(n\)个时间段上.在第\(i(1\leq i\leq n)\)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室\(c_i\)上课,而另一节课程在教室\(d_i\)进行. 在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的 nn 节安排好的课程.如果学生想更换第\(i\)节课程的教室,则需要提

Noip2016 换教室(数学期望入门)

题意:有2n个课程安排在n个时间段上,在第i个时间被安排在ci教室上课,但牛牛可以申请换教室,到di教室上课,但只有pi的可能成功.学校有v个教室,e条道路,每条路双向连通,每条路都会消耗一定的体力wi(保证每个教室可以互相到达),问牛牛应该怎么安排,才能使总花费的体力的期望值最小. 输入格式: 第一行四个整数n,m,v,e.n表示时间短的数量:m表示最多可以申请更换教室的数量:v表示教室的数量:e表示道路的数量. 第二行n个正整数,第i个表示ci: 第三行n个正整数,第i个表示di: 第四行n