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号没换/换了的最小值
....的内容大概就是这几种状态间转移的期望,讨论讨论就行了
#include<bits/stdc++.h>
#define pa pair<int,int>
#define lowb(x) ((x)&(-(x)))
#define REP(i,n0,n) for(i=n0;i<=n;i++)
#define PER(i,n0,n) for(i=n;i>=n0;i--)
#define MAX(a,b) ((a>b)?a:b)
#define MIN(a,b) ((a<b)?a:b)
#define CLR(a,x) memset(a,x,sizeof(a))
#define rei register int
using namespace std;
typedef long long ll;
const int maxn=,maxm=,maxv=; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int N,M,V,E;
int pos[maxn][],dis[maxn][maxn];
int sum[maxn];
double f[maxn][maxn][],c[maxn]; void floyd(){
for(int i=;i<=V;i++) dis[i][i]=;
for(int i=;i<=V;i++){
for(int j=;j<=V;j++){
for(int k=;k<=V;k++){
if(dis[j][i]>=1e9||dis[i][k]>=1e9) continue;
dis[j][k]=min(dis[j][i]+dis[i][k],dis[j][k]);
}
}
}
} int main(){
//freopen(".in","r",stdin);
int i,j,k;
N=rd(),M=rd(),V=rd(),E=rd();
if(N==){printf("0.00\n");return ;}
for(i=;i<=N;i++) pos[i][]=rd();
for(i=;i<=N;i++) pos[i][]=rd();
for(i=;i<=N;i++) scanf("%lf",&c[i]);
memset(dis,,sizeof(dis));
for(i=;i<=E;i++){
int a=rd(),b=rd(),c=rd();
dis[a][b]=min(dis[a][b],c);
dis[b][a]=min(dis[b][a],c);
}floyd();
for(i=;i<=N;i++) for(j=;j<=M;j++) f[i][j][]=f[i][j][]=1e9;
f[][][]=f[][][]=f[][][]=;
for(i=;i<=N;i++){
for(j=;j<=min(i,M);j++){
f[i][j][]=min(f[i-][j][]+dis[pos[i-][]][pos[i][]],
f[i-][j][]+dis[pos[i-][]][pos[i][]]*(-c[i-])+dis[pos[i-][]][pos[i][]]*c[i-]);
if(j){
f[i][j][]=min(f[i-][j-][]+dis[pos[i-][]][pos[i][]]*(-c[i])+dis[pos[i-][]][pos[i][]]*c[i],
f[i-][j-][]+(dis[pos[i-][]][pos[i][]]*(-c[i])+dis[pos[i-][]][pos[i][]]*c[i])*(-c[i-])+
(dis[pos[i-][]][pos[i][]]*(-c[i])+dis[pos[i-][]][pos[i][]]*c[i])*c[i-]);
}
}
}
double ans=1e9;
for(i=;i<=M;i++) ans=min(ans,min(f[N][i][],f[N][i][]));
printf("%.2lf\n",ans);
return ;
}
luogu1850 [NOIp2016]换教室 (floyd+dp)的更多相关文章
- bzoj4720: [Noip2016]换教室(期望dp)
4720: [Noip2016]换教室 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1294 Solved: 698[Submit][Status ...
- 【bzoj4720】[NOIP2016]换教室 期望dp
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...
- JZYZOJ1457 [NOIP2016]换教室 期望dp 动态规划 floyd算法 最短路
http://172.20.6.3/Problem_Show.asp?id=1457 我不知道为什么我倒着推期望只有80分,所以我妥协了,我对着题解写了个正的,我有罪. #include<cst ...
- 【bzoj4720】[Noip2016]换教室 期望dp+最短路
Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的 ...
- 洛谷1850(NOIp2016) 换教室——期望dp
题目:https://www.luogu.org/problemnew/show/P1850 状态里记录的是”上一回有没有申请“,而不是”上一回申请成功否“,不然“申请 j 次”就没法转移了. dou ...
- [NOIP2016]换教室 期望dp
先弗洛伊德,然后把状态拆分遗传 #include<iostream> #include<cstdio> #include<cstring> #include< ...
- 洛谷P1850 [noip2016]换教室——期望DP
题目:https://www.luogu.org/problemnew/show/P1850 注释掉了一堆愚蠢,自己还是太嫩了... 首先要注意选或不选是取 min 而不是 /2 ,因为这里的选或不选 ...
- [NOIP2016]换教室 D1 T3 Floyed+期望DP
[NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...
- BZOJ 4720 [Noip2016]换教室
4720: [Noip2016]换教室 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i( ...
随机推荐
- C#_反射机制
一:反射的定义 审查元数据并收集关于它的类型信息的能力.元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等. Sys ...
- 基于SimpleChain Beta的跨链交互与持续稳态思考
1. 区块链扩展性迷局 比特币作为第一个区块链应用与运行到目前为止最被信任的公链,其扩展性问题却持续被作为焦点贯穿着整个链的发展周期.事实上,在2009年1月4日比特币出现的那一天到2010年10月1 ...
- PHP magic_quotes_gpc 和 addslashes解析
默认情况下,PHP 指令 magic_quotes_gpc 为 on,它主要是对所有的 GET.POST 和 COOKIE 数据自动运行 addslashes().不要对已经被 magic_quote ...
- sqoop 使用笔记
好久没有更新自己技术博客,现在开始工作了,把自己遇到的问题写到这里边来 主要把自己的问题写出来,分享给大家 sqoop 导入数据时候 有时候会遇到mysql 中有sql 中的关键字 这时候如果直接导出 ...
- personal project
words count program 统计文本文件的字符数,单词数和行数. 实现一个统计程序,他能正确的统计程序文件中的字符数,单词数和行数. 源码链接 https://github.com/sup ...
- Practice4 阅读《构建之法》6-7章
关于第五章后面的阅读已经在Practice3中有所感悟,下面是6-7章的读书笔记. 第6章 敏捷流程这一章讲了“敏捷流程”这一概念,关于这一名词我是很陌生的,在阅读之后有了一定的理解.敏捷流程是提供了 ...
- 关于摄影O2O的前期准备
更新内容暂时在这位同学的博客:http://www.cnblogs.com/ys1101/
- BETA 版冲刺前准备
任务博客 组长博客 总的来讲Alpha阶段我们计划中的工作是如期完成的.不过由于这样那样的原因,前后端各个任务完成度不算非常高,距离完成一个真正好用.完美的软件还有所差距. 过去存在的问题 测试工作未 ...
- SQL语句及5.7.2 mysql 用户管理
一.用户的定义 1.1 用户名+主机域 此处为5.7.2版本的mysql当中password字段已改为authentication_string mysql> select user,host, ...
- how-is-docker-different-from-a-normal-virtual-machine[Docker与VirtualMachine的区别]
https://stackoverflow.com/questions/16047306/how-is-docker-different-from-a-normal-virtual-machine 被 ...