AcWing 233. 换教室 (期望DP+floyd)打卡
题目:https://www.acwing.com/problem/content/235/
题意:有n个时间段,这个时间段有两个地方授课ci,di,最开始是在ci,可以申请去di,但是是几率的,然后有x个教室,y条道路,还有k个机会申请,可以申请<=k次,最后求怎么样的申请求的期望值最低,求那个最低值
思路:这个题我们首先先求一遍floyd,为了方便后面的操作,我们其实很容易看出这是一个dp,什么可以选k次这些都是惯用套路,这个题其实就只用分两种状态,每个时间段申请或者不申请,所以我们的dp数组就可以写成 dp[i][j][k] ,i是代表是第几个时间段,j是代表申请了j次,k只有0/1代表申请不申请,最后我们要留意的是,转移方程这里,因为申请是有几率申请成功的,所以我们要考虑是否申请成功,所以要记录两种状态,如果连续两次都申请的话那就要用到乘法原理变成四种情况,然后转移即可
#include<bits/stdc++.h>
#define maxn 100005
#define mod 1000000007
using namespace std;
double p[],f[][],dp[][][];
int a[][],c[],d[];
int main()
{
int n,m,v,e,a1,b1,c1;
cin>>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",&p[i]); for(int i=;i<=v;i++)
for(int j=;j<i;j++)
f[i][j]=f[j][i]=; for(int i=;i<=e;i++){
scanf("%d%d%d",&a1,&b1,&c1);
f[a1][b1]=f[b1][a1]=min(f[a1][b1],(double)c1);
} for(int k=;k<=v;k++)
for(int i=;i<=v;i++)
for(int j=;j<i;j++)
if(f[i][k]+f[k][j]<f[i][j])
f[i][j]=f[j][i]=f[i][k]+f[k][j]; for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
dp[i][j][]=dp[i][j][]=; dp[][][]=dp[][][]=;
for(int i=;i<=n;i++){
double add1=f[c[i-]][c[i]];
for(int j=;j<=min(m,i);j++)
{
dp[i][j][]=min(dp[i-][j][]+add1,dp[i-][j][]+f[d[i-]][c[i]]*p[i-]+f[c[i-]][c[i]]*(-p[i-]));//不申请 由前面是否申请来推出后面
if(j!=)//乘法原理计算四种情况
dp[i][j][]=min(dp[i-][j-][]+f[c[i-]][d[i]]*p[i]+f[c[i-]][c[i]]*(-p[i]),dp[i-][j-][]+f[c[i-]][c[i]]*(-p[i-])*(-p[i])+f[c[i-]][d[i]]*(-p[i-])*p[i]+f[d[i-]][c[i]]*(-p[i])*p[i-]+f[d[i-]][d[i]]*p[i-]*p[i]);
}
} double hahaha=;
for(int i=;i<=m;i++){
hahaha=min(dp[n][i][],min(dp[n][i][],hahaha));}
printf("%.2lf",hahaha);
}
AcWing 233. 换教室 (期望DP+floyd)打卡的更多相关文章
- 换教室(期望+DP)
换教室(期望+DP) \(dp(i,j,1/0)\)表示第\(i\)节课,申请了\(j\)次调换,这节课\(1/0\)调换. 换教室 转移的时候考虑: 上次没申请 这次也没申请 加上\(dis(fr[ ...
- 【bzoj4720】[NOIP2016]换教室 期望dp
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...
- 【bzoj4720】[Noip2016]换教室 期望dp+最短路
Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的 ...
- bzoj4720: [Noip2016]换教室(期望dp)
4720: [Noip2016]换教室 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1294 Solved: 698[Submit][Status ...
- Luogu P1850 换教室(期望dp)
P1850 换教室 题意 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有\(2n\)节课程安排在\(n\)个时间段上.在第\(i(1\l ...
- Luogu P1850 [NOIp2016提高组]换教室 | 期望dp
题目链接 思路: <1>概率与期望期望=情况①的值*情况①的概率+情况②的值*情况②的概率+--+情况n的值*情况n的概率举个例子,抛一个骰子,每一面朝上的概率都是1/6,则这一个骰子落地 ...
- 【BZOJ4720】【NOIP2016】换教室 [期望DP]
换教室 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description Input 第一行四个整数n,m,v ...
- Bzoj 4720 换教室 (期望DP)
刚发现Bzoj有Noip的题目,只会换教室这道题..... Bzoj 题面:Bzoj 4720 Luogu题目:P1850 换教室 大概是期望DPNoip极其友好的一道题目,DP不怎么会的我想到了,大 ...
- P1850 换教室 期望dp
P1850 换教室 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n 节课程安排在 nn 个时间段上.在第 ii(1 \leq ...
随机推荐
- 【Java】java获取request body
//方式一 public static String ReadAsChars(HttpServletRequest request) { BufferedReader br = null; Strin ...
- flutter Container组件和Text组件
在开始之前,我们先写一个最简单的入口文件: 后面,都是在这个结构的基础上面完成的. 由于Container组件和Text组件都是写在body里面的,所以下面,先将body抽离成一个组件的形式. ...
- vue开发微信公众号--地图
在最近开发的微信公众号中,要实现一个打卡功能: 由于个人感觉微信SDK里面的地图不太好用,所以使用了腾讯地图. 在项目中引入腾讯地图 1,需要登录腾讯地图网站,注册一个账户,获得一个key. 2,然后 ...
- LOJ 2557 「CTSC2018」组合数问题 (46分)
题目:https://loj.ac/problem/2557 第一个点可以暴搜. 第三个点无依赖关系,k=3,可以 DP .dp[ cr ][ i ][ j ] 表示前 cr 个任务.第一台机器最晚完 ...
- Linux 虚拟机通过NAT模式访问外网
1.配置本地VM8地址 2.配置虚拟机NAT网卡:设置VM8网卡地址和Linux主机相同网段地址,网关随便设置 3.编译网卡文件 vim /etc/sysconfig/network-scri ...
- [CSP-S模拟测试]:God Knows(线段树维护单调栈)
题目描述 小$w$来到天堂的门口,对着天堂的大门发呆.大门上有一个二分图,左边第$i$个点连到右边第$p_i$个点.(保证$p_i$是一个排列).小$w$每次可以找左边某个对应连线尚未被移除的点$i$ ...
- 使用juqery-ui完成联想查询功能
最近公司的项目有个需求,需要使用联想查询功能.就是一个文本输入框,在输入的时候获取值去后端模糊查询然后按照列表显示在下面.效果如下图: 经过搜索找到这个插件,查阅资料可以完成这个功能,即可以实现静态数 ...
- 单例模式@Singleton在测试中的运用
前言 单例模式是一种比较常用的设计模式,目的是:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 测试种可能用到的场景 : 在很多时候,有些对象我们希望在整个程序只有一个实例,如线程池.数据库连 ...
- jmeter添加自定义扩展函数之if判断
1,打开eclipse,新建maven工程,在pom中引用jmeter核心jar包,具体请看---https://www.cnblogs.com/guanyf/p/10863033.html---,这 ...
- linux文本查看与搜索
1. cat-->全文本显示 cat file #全文本显示在终端 cat -n file #显示全文本,并显示行号 cat file1 file2 >file3 #将file1 file ...