bzoj 4720: [Noip2016]换教室【期望dp】

状压dp,设f[i][j][0/1]为前i个时间段换了j间教室的期望体力消耗,转移很好想(但是写起来好长= =)

#include<iostream>
#include<cstdio>
using namespace std;
const int N=2005;
int n,m,v,e,c[N],d[N];
double k[N],f[N][N][2],ans=1e9,a[N][N],z;
int read()
{
    int r=0,f=1;
    char p=getchar();
    while(p<‘0‘||p>‘9‘)
    {
        if(p==‘-‘)
            f=-1;
        p=getchar();
    }
    while(p>=‘0‘&&p<=‘9‘)
    {
        r=r*10+p-48;
        p=getchar();
    }
    return r*f;
}
int main()
{
    n=read(),m=read(),v=read(),e=read();
    for(int i=1;i<=n;i++)
        c[i]=read();
    for(int i=1;i<=n;i++)
        d[i]=read();
    for(int i=1;i<=n;i++)
        scanf("%lf",&k[i]);
    for(int i=1;i<=v;i++)
        for(int j=1;j<=v;j++)
            a[i][j]=1e9;
    for(int i=1;i<=v;i++)
        a[i][i]=0;
    for(int i=1;i<=e;i++)
    {
        int x=read(),y=read();
        scanf("%lf",&z);
        a[x][y]=a[y][x]=min(z,a[x][y]);
    }
    for(int q=1;q<=v;q++)
        for(int i=1;i<=v;i++)
            for(int j=1;j<=v;j++)
                if(a[i][j]>a[i][q]+a[q][j])
                    a[i][j]=a[i][q]+a[q][j];
    for(int i=1;i<=n;i++)
        for(int j=0;j<=m;j++)
            f[i][j][0]=f[i][j][1]=1e9;
    f[1][0][0]=f[1][1][1]=0.0;
    for(int i=2;i<=n;i++)
    {
        f[i][0][0]=f[i-1][0][0]+a[c[i-1]][c[i]];
        for(int j=1;j<=min(m,i);j++)
        {
            f[i][j][0]=min(f[i-1][j][0]+a[c[i-1]][c[i]],f[i-1][j][1]+k[i-1]*a[d[i-1]][c[i]]+(1.0-k[i-1])*a[c[i-1]][c[i]]);
            f[i][j][1]=min(f[i-1][j-1][0]+k[i]*a[c[i-1]][d[i]]+(1.0-k[i])*a[c[i-1]][c[i]],f[i-1][j-1][1]+k[i-1]*k[i]*a[d[i-1]][d[i]]+(1.0-k[i-1])*k[i]*a[c[i-1]][d[i]]+k[i-1]*(1.0-k[i])*a[d[i-1]][c[i]]+(1.0-k[i-1])*(1.0-k[i])*a[c[i-1]][c[i]]);
        }
    }
    for(int i=0;i<=m;i++)
        ans=min(ans,min(f[n][i][0],f[n][i][1]));
    printf("%.2f\n",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/lokiii/p/9590817.html

时间: 2024-11-08 15:12:39

bzoj 4720: [Noip2016]换教室【期望dp】的相关文章

BZOJ 4720 [Noip2016]换教室

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

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

Luogu P1850 换教室(期望dp)

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

P1850 换教室——期望DP

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

BZOJ P4720[Noip2016]换教室____solution

题目太长不表 <--无形传送,最为致命 学习一点数学期望的基础,预处理最短路,然后加上DP即可.(废话) 理解决策和结果的差别: 在这里每阶段的决策有两个:申请|不申请 结果有两个:换|不换 然而二者不是一一对应的关系: 而且决策意味着状态,结果只用于计算期望 为什么呢 因为答案要的就是对于某种决策组的期望 于是状态的设计应该是分为申请|不申请, 然后计算期望时讨论申请成不成功: 状态:f[i,j,0/1]讨论前i节课,申请j次,第三维=[第i节申请了] 方程: //f[i][j][0]=f[i

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 rea

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

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

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

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

【NOIP2016】换教室(DP,期望)

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