P1850 换教室

有 2n 节课程安排在 nn 个时间段上。在第 i个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室 $c_i$​ 上课,而另一节课程在教室 $d_i$ 进行。

在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的 n节安排好的课程。如果学生想更换第 i节课程的教室,则需要提出申请。若申请通过,学生就可以在第 i个时间段去教室 $d_i$​ 上课,否则仍然在教室 $c_i$ 上课。

由于更换教室的需求太多,申请不一定能获得通过。通过计算,牛牛发现申请更换第 i节课程的教室时,申请被通过的概率是一个已知的实数 $k_i$​,并且对于不同课程的申请,被通过的概率是互相独立的。

学校规定,所有的申请只能在学期开始前一次性提交,并且每个人只能选择至多 $m$ 节课程进行申请。这意味着牛牛必须一次性决定是否申请更换每节课的教室,而不能根据某些课程的申请结果来决定其他课程是否申请;牛牛可以申请自己最希望更换教室的 $m$ 门课程,也可以不用完这 mm 个申请的机会,甚至可以一门课程都不申请。

因为不同的课程可能会被安排在不同的教室进行,所以牛牛需要利用课间时间从一间教室赶到另一间教室。

牛牛所在的大学有 vv 个教室,有 e 条道路。每条道路连接两间教室,并且是可以双向通行的。由于道路的长度和拥堵程度不同,通过不同的道路耗费的体力可能会有所不同。 当第 i节课结束后,牛牛就会从这节课的教室出发,选择一条耗费体力最少的路径前往下一节课的教室。

现在牛牛想知道,申请哪几门课程可以使他因在教室间移动耗费的体力值的总和的期望值最小,请你帮他求出这个最小值。

设$dp[i][j][0]$表示前i节课换了j次且这一次没换的耗费体力值得期望和的最小值,

同理$dp[i][j][1]$表示前i节课换了j次且这一次换了的耗费体力值得期望和的最小值;

首先你换教室有可能成功,当然也有可能失败,那么你这一次的概率就等于上一次换或不换成功不成功,这一次换或不换成功不成功期望路径和的最小值。

分类讨论即可。

#include<bits/stdc++.h>

#define N 2005
using namespace std; int n,m,V,E,c[N],d[N],dis[N][N];
double k[N],ans,dp[][][]; int main()
{
scanf("%d%d%d%d",&n,&m,&V,&E);
for(int i=;i<=n;i++) scanf("%d",&c[i]);
for(int i=;i<=n;i++) scanf("%d",&d[i]);
for(int i=;i<=n;i++) scanf("%lf",&k[i]); memset(dis,0x3f,sizeof(dis));
for(int u,v,w,i=;i<=E;i++){
scanf("%d%d%d",&u,&v,&w);
dis[u][v]=dis[v][u]=min(w,dis[u][v]);
}
//Floyd预处理
for(int K=;K<=V;K++){
for(int i=;i<=V;i++){
for(int j=;j<=V;j++){
dis[i][j]=min(dis[i][K]+dis[K][j],dis[i][j]);
}
}
} for(int i=;i<=V;i++) dis[i][i]=dis[i][]=dis[][i]=; memset(dp,0x7f,sizeof(dp));
dp[][][]=dp[][][]=;
for(int i=;i<=n;i++){
dp[i][][]=dp[i-][][]+dis[c[i-]][c[i]];
for(int j=;j<=min(i,m);j++){
int c1=c[i-],c2=c[i],d1=d[i-],d2=d[i];
dp[i][j][]=min(dp[i][j][],
min(dp[i-][j][]+dis[c1][c2],
dp[i-][j][]+dis[d1][c2]*k[i-]+dis[c1][c2]*(1.0-k[i-]))); dp[i][j][]=min(dp[i][j][],
min(dp[i-][j-][]+dis[c1][c2]*(1.0-k[i])+dis[c1][d2]*k[i],//上一次没换
dp[i-][j-][]+dis[d1][c2]*k[i-]*(1.0-k[i])//上一次换了成功且这一次没成功
+dis[d1][d2]*k[i-]*k[i]//上一次换了成功且这一次也成功
+dis[c1][d2]*(1.0-k[i-])*k[i]//上一次换了没成功且这一次成功
+dis[c1][c2]*(1.0-k[i-])*(1.0-k[i])));//上一次换了没成功且这一次也没成功
// printf("%.2lf %.2lf\n",dp[i][j][0],dp[i][j][1]);
}
} ans=0x7fffffff;
for(int i=;i<=m;i++)//从0开始,可以一次也不换
ans=min(ans,min(dp[n][i][],dp[n][i][])); printf("%.2lf",ans);
return ;
}

洛谷——P1850 换教室的更多相关文章

  1. 洛谷 P1850 换教室 解题报告

    P1850 换教室 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有\(2n\)节课程安排在\(n\)个时间段上.在第\(i(1≤i≤n) ...

  2. 洛谷 P1850 换教室

    P1850 换教室 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n 节课程安排在 nn 个时间段上.在第 ii(1 \leq ...

  3. 洛谷P1850换教室

    题目传送门 理解题意:给定你一个学期的课程和教室数量以及教室之间的距离还有换教室成功的概率,求一个学期走的距离的期望最小值 题目是有够恶心的,属于那种一看就让人不想刷的题目...很明显的动规,但是那个 ...

  4. 洛谷P1850 换教室

    令人印象深刻的状态转移方程... f[i][j][0/1]表示前i个换j次,第i次是否申请时的期望. 注意可能有重边,自环. 转移要分类讨论,距离是上/这次成功/失败的概率乘相应的路程. 从上次的0/ ...

  5. 洛谷P1850 换教室(概率dp)

    传送门 我的floyd竟然写错了?今年NOIP怕不是要爆零了? 这就是一个概率dp 我们用$dp[i][j][k]$表示在第$i$个时间段,已经申请了$j$次,$k$表示本次换或不换,然后直接暴力转移 ...

  6. 洛谷P1850 换教室 [noip2016] 期望dp

    正解:期望dp 解题报告: 哇我发现我期望这块真的布星,可能在刷了点儿NOIp之后会去搞一波期望dp的题...感觉连基础都没有打扎实?基础概念都布星! 好那先把这题理顺了嗷qwq 首先我们看到期望就会 ...

  7. 洛谷P1850 换教室_数学期望_Floyd

    调了一下午QAQ-让我对数学期望的理解又提升了一个层次. 首先,我们发现 v<=300v<=300v<=300 , 这样我们就可以用 FloydFloydFloyd 算法来 O(n3 ...

  8. bzoj4720 / P1850 换教室(Floyd+期望dp)

    P1850 换教室 先用Floyd把最短路处理一遍,接下来就是重头戏了 用 f [ i ][ j ][ 0/1 ] 表示在第 i 个时间段,发出了 j 次申请(注意不一定成功),并且在这个时间段是否( ...

  9. P1850 换教室

    P1850 换教室 现在有一张图, 有 \(v <= 300\) 个节点 你需要从 \(c_{1}\) 到 \(c_{2}\) 到 \(c_{n} (n <= 2000)\) 现在你有 \ ...

随机推荐

  1. YTU 2535: C++复数运算符重载(+与<<)

    2535: C++复数运算符重载(+与<<) 时间限制: 1 Sec  内存限制: 128 MB 提交: 867  解决: 532 题目描述 定义一个复数类Complex,重载运算符&qu ...

  2. Bing必应地图中国API-画线与添加多边形

    Bing必应地图中国API-画线与添加多边形 2011-05-24 14:31:20|  分类: Bing&Google|字号 订阅     在必应地图上画线的功能应用也很广泛:显示从出发地到 ...

  3. cassandra的全文检索插件

    https://github.com/Stratio/cassandra-lucene-index Stratio’s Cassandra Lucene Index Stratio’s Cassand ...

  4. wtpwebapps下没有相应的文件

    右击clean

  5. poj 2186(tarjan+缩点)

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 37083   Accepted: 15104 De ...

  6. ZOJ 3964 Yet Another Game of Stones Nim游戏变种

    ZOJ3964 解题思路 此题的题意比较容易理解,可以简单的看着 Nim 博弈的变种.但问题在于 Alice 对第 i 堆石子的取法必须根据 bi 确定.所以如果这个问题能够归结到正常的 Nim 博弈 ...

  7. 移动端html touch事件

    诸如智能手机和平板电脑一类的移动设备通常会有一(capacitive touch-sensitivescreen),以捕捉用户的手指所做的交互.随着移动网络的发展,其能够支持越来越复杂的应用,web开 ...

  8. JAVA POI的使用

    最近开发遇到了要通过Java处理Excel文件的场景,于是乎在网上了解了一番,最后自己做了个demo,已上传gitee:https://gitee.com/github-26930945/JavaCo ...

  9. BACnet开发资料与调试工具

    一.开发资料 1.认识BACnet协议 2.BACnet网络讲义: 链接:https://pan.baidu.com/s/1A6OOUxvJe1zIYbockqTEsQ提取码:wz49 二.调试工具 ...

  10. 洛谷2019 3月月赛 T2

    题干 洛谷同款 T2?(看似比T1简单些) 二维前缀和嘛?[多简单 我天天拿二维前缀和水DP] 这是前缀和的预处理 2333 处理出来所有的情况 某个地方要加上mod再%mod 如果没有这一步 那么 ...