luogu1850 [NOIp2016]换教室 (floyd+dp)
首先floyd求出每两点间的距离(注意自己到自己的距离要设成0)
然后就是dp了
一开始照着Lifeguards的样子,钦定了一下i这个点一定要选,然后发现复杂度不对,还想了好长时间优化
然后一翻题解,直接两种状态选或不选分开算O(1)转移多好(所以年轻人不要整天满脑子都是钦定钦定的)
但为什么Lifeguards要钦定呢?因为如果你有一个删掉的状态,那我无法确定前面的到底到哪是没删的
那就是$f[i][j][1/0]=max(f[i][j][1/0]+....)$,f[i][j][0/1]是换到第i个、换了j个、i号没换/换了的最小值
....的内容大概就是这几种状态间转移的期望,讨论讨论就行了
1 #include<bits/stdc++.h> 2 #define pa pair<int,int> 3 #define lowb(x) ((x)&(-(x))) 4 #define REP(i,n0,n) for(i=n0;i<=n;i++) 5 #define PER(i,n0,n) for(i=n;i>=n0;i--) 6 #define MAX(a,b) ((a>b)?a:b) 7 #define MIN(a,b) ((a<b)?a:b) 8 #define CLR(a,x) memset(a,x,sizeof(a)) 9 #define rei register int 10 using namespace std; 11 typedef long long ll; 12 const int maxn=2020,maxm=2020,maxv=310; 13 14 inline ll rd(){ 15 ll x=0;char c=getchar();int neg=1; 16 while(c<'0'||c>'9'){if(c=='-') neg=-1;c=getchar();} 17 while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); 18 return x*neg; 19 } 20 21 int N,M,V,E; 22 int pos[maxn][2],dis[maxn][maxn]; 23 int sum[maxn]; 24 double f[maxn][maxn][2],c[maxn]; 25 26 void floyd(){ 27 for(int i=1;i<=V;i++) dis[i][i]=0; 28 for(int i=1;i<=V;i++){ 29 for(int j=1;j<=V;j++){ 30 for(int k=1;k<=V;k++){ 31 if(dis[j][i]>=1e9||dis[i][k]>=1e9) continue; 32 dis[j][k]=min(dis[j][i]+dis[i][k],dis[j][k]); 33 } 34 } 35 } 36 } 37 38 int main(){ 39 //freopen(".in","r",stdin); 40 int i,j,k; 41 N=rd(),M=rd(),V=rd(),E=rd(); 42 if(N==1){printf("0.00\n");return 0;} 43 for(i=1;i<=N;i++) pos[i][0]=rd(); 44 for(i=1;i<=N;i++) pos[i][1]=rd(); 45 for(i=1;i<=N;i++) scanf("%lf",&c[i]); 46 memset(dis,127,sizeof(dis)); 47 for(i=1;i<=E;i++){ 48 int a=rd(),b=rd(),c=rd(); 49 dis[a][b]=min(dis[a][b],c); 50 dis[b][a]=min(dis[b][a],c); 51 }floyd(); 52 for(i=1;i<=N;i++) for(j=0;j<=M;j++) f[i][j][0]=f[i][j][1]=1e9; 53 f[1][0][0]=f[1][1][0]=f[1][1][1]=0; 54 for(i=2;i<=N;i++){ 55 for(j=0;j<=min(i,M);j++){ 56 f[i][j][0]=min(f[i-1][j][0]+dis[pos[i-1][0]][pos[i][0]], 57 f[i-1][j][1]+dis[pos[i-1][0]][pos[i][0]]*(1-c[i-1])+dis[pos[i-1][1]][pos[i][0]]*c[i-1]); 58 if(j){ 59 f[i][j][1]=min(f[i-1][j-1][0]+dis[pos[i-1][0]][pos[i][0]]*(1-c[i])+dis[pos[i-1][0]][pos[i][1]]*c[i], 60 f[i-1][j-1][1]+(dis[pos[i-1][0]][pos[i][0]]*(1-c[i])+dis[pos[i-1][0]][pos[i][1]]*c[i])*(1-c[i-1])+ 61 (dis[pos[i-1][1]][pos[i][0]]*(1-c[i])+dis[pos[i-1][1]][pos[i][1]]*c[i])*c[i-1]); 62 } 63 } 64 } 65 double ans=1e9; 66 for(i=0;i<=M;i++) ans=min(ans,min(f[N][i][0],f[N][i][1])); 67 printf("%.2lf\n",ans); 68 return 0; 69 }
转载于:https://www.cnblogs.com/Ressed/p/9696075.html
luogu1850 [NOIp2016]换教室 (floyd+dp)相关推荐
- 洛谷1850(NOIp2016) 换教室——期望dp
题目:https://www.luogu.org/problemnew/show/P1850 状态里记录的是"上一回有没有申请",而不是"上一回申请成功否",不 ...
- BZOJ 4720 [Noip2016]换教室
4720: [Noip2016]换教室 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i( ...
- [NOIP2016]换教室(概率期望$DP$)
其实吧我老早就把这题切了--因为说实话,这道题确实不难啊--李云龙:比他娘的状压DP简单多了 今天我翻以前在Luogu上写的题解时,突然发现放错代码了,然后被一堆人\(hack\)--蓝瘦啊\(ORZ ...
- noip2016 换教室
题目描述 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 i ( 1≤ i≤n)个时同段上, 两节内容相同的课 ...
- Noip2016换教室
传送门! Simple Description: 牛牛有$n$节课要上,每个时段都有$2$个教室在上课(具体来说是第$c[i]$与第$d[i]$个教室),牛牛在其中的一个教室上课,牛牛起初每节课分别被 ...
- BZOJ 4720: [Noip2016]换教室
错是被学长挑出来的...QWQ@Monster_Yi f[i][j][0/1] 为 第i天,换j次,换1/没换0 然后大力DP #include<cstdio> #include<i ...
- P1850 [NOIP2016 提高组] 换教室
P1850 [NOIP2016 提高组] 换教室 题意: 有2n个课安排在n个时间段上,每个时间段上都有两个一样的课同时在不同地方上,起初牛牛被所有课都被安排在Ci上课,另一节课在Di上课.牛牛现在想 ...
- 【NOIp2016 day1t3】换教室
NOIP第一次考期望,着实吓一跳... 读入之后, 由于 n<=200 n <= 200 n,给我们建立了天然的 floyd f l o y d floyd的机会, 建完图之后,能够顺利的 ...
- 【DP】【期望】$P1850$换教室
[DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...
最新文章
- EntityFramework SaveChange()方法不能更新的问题
- 黑马java教程是什么_Java教程:揭秘什么是面向接口编程
- android手机短信拦截器,垃圾短信退订套路深 手机上装拦截软件是可行方法
- 类欧几里得算法详细推导过程(附带模板)
- android retrofit 2.0公共参数,Retrofit2.0 添加公共参数
- Myeclipse快键键
- Java 高阶 —— try/catch
- bzoj 1861 treap
- 有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代
- 使用Audition将PCM格式转Wav格式
- 如何用数据进行产品运营
- python RGB与LCH互转 算法
- 软件智能:aaas系统 基于本体论的AI通用框架
- 自动(智能)驾驶 | 傲酷4D毫米波雷达报告记录分享
- 微信小程序系列2——小程序页面渲染和逻辑的关系
- 网页如何与小程序交互通信
- python解决数学建模发电商机组调度问题
- 2022/12/1 组会
- IDEA 出现 Exception in thread main java.lang.OutOfMemoryError: Java heap space 解决方式
- 【MySQL 8.0 OCP 1Z0-908认证考试】题库精讲--第五讲mysqlbinlog与mysqldump(下)
热门文章
- linux 取文件字节数,如何在Linux上的C中获取文件中的字符数(而不是字节数)
- 985计算机只考数据结构,初试只考数据结构的985院校
- 分布式mysql 不支持存储过程_分布式数据库VoltDB对存储过程的支持
- 安卓9.0官方系统升级包_想升级鸿蒙系统都来看看!华为新系统升级名单曝光:有你手机吗?...
- boot idea无法识别spring_IDEA 的这款插件真是逆天了,代码那都不是事
- c++ 基数排序算法_基数排序算法– C / C ++实现的基础
- 如何在Ubuntu 18.04上安装Elasticsearch Logstash Kibana(Elastic Stack)
- tomcat配置重定向_在Tomcat上配置SSL以及从HTTP到HTTPS的设置自动重定向的步骤
- fork/join框架Java
- Java大厂面试题:从 JVM 角度说进程和线程之间的关系