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 namespace std;
 8 const int maxn=2010;
 9 int t,k,n,m;
10 int c[2][maxn]={};
11 int dis[310][310]={};
12 int vis[maxn]={};
13 double f[maxn][maxn][2];
14 double ke[maxn]={};
15 int main(){
16     //freopen("wtf.in","r",stdin);
17     scanf("%d%d%d%d",&t,&k,&n,&m);
18     int x,y,v;
19     for(int i=1;i<=t;i++){
20         scanf("%d",&c[0][i]);
21     }
22     for(int i=1;i<=t;i++){
23         scanf("%d",&c[1][i]);
24     }
25     for(int i=1;i<=t;i++){
26         scanf("%lf",&ke[i]);
27     }
28     memset(dis,63,sizeof(dis));
29     for(int i=1;i<=n;i++) dis[i][i]=0;
30     for(int i=1;i<=m;i++){
31         scanf("%d%d%d",&x,&y,&v);
32         dis[x][y]=min(dis[x][y],v);
33         dis[y][x]=dis[x][y];
34     }
35     for(int i=1;i<=n;i++){
36         for(int j=1;j<=n;j++){
37             if(i==j)continue;
38             for(int w=1;w<=n;w++){
39                 if(dis[j][i]+dis[i][w]<dis[j][w]){
40                     dis[j][w]=dis[j][i]+dis[i][w];
41                 }
42             }
43         }
44     }
45     for(int i=1;i<=n;i++) dis[i][0]=dis[0][i]=0;
46     for(int i=0;i<=t;i++){
47         for(int j=0;j<=k;j++){
48             f[i][j][1]=20000000000.0;
49             f[i][j][0]=20000000000.0;
50         }
51     }double ans=f[0][0][0];
52     f[1][0][0]=f[1][1][1]=0;
53     for(int i=2;i<=t;i++){
54         int ma=min(i,k);
55         f[i][0][0]=f[i-1][0][0]+dis[c[0][i-1]][c[0][i]];
56         for(int j=1;j<=ma;j++){
57             f[i][j][0]=min(f[i-1][j][0]+dis[c[0][i-1]][c[0][i]],f[i-1][j][1]+dis[c[1][i-1]][c[0][i]]*ke[i-1]+dis[c[0][i-1]][c[0][i]]*(1.0-ke[i-1]));
58             f[i][j][1]=min(f[i-1][j-1][0]+dis[c[0][i-1]][c[1][i]]*ke[i]+dis[c[0][i-1]][c[0][i]]*(1-ke[i]),
59             f[i-1][j-1][1]+dis[c[1][i-1]][c[1][i]]*ke[i]*ke[i-1]+dis[c[1][i-1]][c[0][i]]*ke[i-1]*(1.0-ke[i])
60             +dis[c[0][i-1]][c[1][i]]*(1.0-ke[i-1])*ke[i]+dis[c[0][i-1]][c[0][i]]*(1.0-ke[i])*(1.0-ke[i-1]));
61         }
62     }
63     for(int i=0;i<=k;i++){
64         ans=min(ans,min(f[t][i][0],f[t][i][1]));
65     }
66     printf("%.2f",ans);
67     return 0;
68 }

时间: 2024-10-15 16:02:25

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

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 节课程的

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节课程的教室,则需要提出中情.若申请通过,学生

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

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

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

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

【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个小项