【NOIP】2016 换教室
【算法】期望DP+floyd
【题解】用floyd预处理最短距离。
注意重边与自环——图论双毒!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
QAQ
然后搞清楚方案和概率的问题,我们DP是要决策最优方案。
f[i][j][0~1]表示前i个,剩余j份申请资格,当前第i个是否申请的最小期望(注意是是否申请,和通过无关)
然后转移就是从前面申请或不申请中选最小的转移,转移时有涉及申请的在叠加概率。
不要怕调出来过不了,怕的是没看清题意QAQ重边!
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=,maxv=;
int a[maxn][maxn],n,m,v,e,c[maxn],d[maxn];
double k[maxn],f[maxn][maxn][];
void floyd()
{
for(int k=;k<=v;k++)
for(int i=;i<=v;i++)
for(int j=;j<=v;j++)
a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
}
double calc(int i,int j,int l,int x)
{
if(l==)return f[i][j][]+a[c[i]][x];
else return k[i]*(f[i][j][]+a[d[i]][x])+(-k[i])*(f[i][j][]+a[c[i]][x]);
}
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(a,0x3f,sizeof(a));
for(int i=;i<=e;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
int z=a[u][v];
a[u][v]=a[v][u]=min(w,z);
}
for(int i=;i<=v;i++)a[i][i]=;
floyd();
for(int i=;i<=v;i++)a[][i]=a[i][]=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
f[i][j][]=f[i][j][]=1e9;
f[i][j][]=min(calc(i-,j,,c[i]),calc(i-,j,,c[i]));
if(j<m)f[i][j][]=min(k[i]*calc(i-,j+,,d[i])+(-k[i])*calc(i-,j+,,c[i]),k[i]*calc(i-,j+,,d[i])+(-k[i])*calc(i-,j+,,c[i]));
}
}
printf("%.2lf",min(f[n][][],f[n][][]));
return ;
}
【NOIP】2016 换教室的更多相关文章
- [BZOJ 4720][NOIP 2016] 换教室
记得某dalao立了"联赛要是考概率期望我直播吃键盘"的$flag$然后就有了这道题233333 4720: [Noip2016]换教室 Time Limit: 20 Sec M ...
- [NOIp 2016]换教室
Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 $2n$ 节课程安排在 $n$ 个时间段上.在第 $i$($1 \leq ...
- NOIP 2016 换教室 (luogu 1850 & uoj 262) - 概率与期望 - 动态规划
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n 节课程安排在 nn 个时间段上.在第 ii(1 \leq i \leq n1≤ ...
- NOIP 2016 换教室(期望dp)
第一次做期望dp 并不知道每个阶段的期望之和就是整个的期望之和 所以一直卡在这 期望=代价*概率 然后注意只有申请了才算期望,否则按原来的. 这道题和前几个课程,申请的限制,当前选或不选,有关 这样很 ...
- Noip 2016 Day 1 & Day 2
Day 1 >>> T1 >> 水题直接模拟AC: 考察三个知识点:1.你能不能编程 2.你会不会取模 3.你脑子抽不抽 然而第一次评测还是90,因为当模运算时 “ en ...
- Noip 2016
Day1 思路: 大致是 把一个环拆成链, 找某个人无非是向右找或向左找(即对当前点加或减) 若加上要移动的位置后坐标大于总人数, 就把当前坐标减去总人数, 若减去要移动的位置后坐标小于0, 就把当前 ...
- BZOJ 4720 [Noip2016]换教室
4720: [Noip2016]换教室 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i( ...
- Bzoj 4720 换教室 (期望DP)
刚发现Bzoj有Noip的题目,只会换教室这道题..... Bzoj 题面:Bzoj 4720 Luogu题目:P1850 换教室 大概是期望DPNoip极其友好的一道题目,DP不怎么会的我想到了,大 ...
- [Luogu 1850] noip16 换教室
[Luogu 1850] noip16 换教室 好久没有更博客了,先唠嗑一会,花了两天的空闲时间大致做完了昨年的noip真题 虽然在经过思考大部分题目都可出解(天天爱跑步除外),但是并不知道考试时候造 ...
随机推荐
- Acm hust 1.25
闲着无聊做了点hust上 acm的训练题 A题 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=104738#problem/A 看了20分 ...
- TCP源码—连接建立
一.SYN报文处理: 公共部分:tcp_v4_rcv->tcp_v4_do_rcv->tcp_v4_cookie_check(无处理动作)->tcp_rcv_state_proces ...
- QT分析之QApplication的初始化
原文地址:http://blog.163.com/net_worm/blog/static/1277024192010097430321/ 在开始分析之前交代一下,一是分析的QT在Window平台实现 ...
- MySQL错误解决10038
[错误解决]本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止 标签: mysql计算机 2016-12-01 17:49 5508人阅读 评论(2) 收藏 举报 ...
- 判断IP地址是否在指定范围内的方法
比如给定一个ip段:127.0.0.1 ~ 127.0.0.255,我们想判断一个给定的ip地址是否在此段内,可以先将ip地址转换成整数,然后整数比较大小就很容易了. 例如: 127.0.0.1 = ...
- 【bzoj1231】[Usaco2008 Nov]mixup2 混乱的奶牛 状态压缩dp
题目描述 混乱的奶牛[Don Piele, 2007]Farmer John的N(4 <= N <= 16)头奶牛中的每一头都有一个唯一的编号S_i (1 <= S_i <= ...
- POJ3525:Most Distant Point from the Sea——题解
http://poj.org/problem?id=3525 题目大意:给一个逆时针序列的多边形点集,求其中可以画的最大半径的圆的半径. —————————————————————— 二分枚举半径长度 ...
- [Leetcode] longest valid parentheses 最长的有效括号
Given a string containing just the characters'('and')', find the length of the longest valid (well-f ...
- Linux实验三
主要参考课本第二章所学习内容 (信息的表示和处理) 所有重点内容: 信息存储 整数表示/运算 浮点数 一 十六进制表示 0~9 A~F 0000~1111 注:(主要参考课本P22) 字 字长: ...
- JavaScript in 操作符
JavaScript的in操作符可以用来判断一个属性是否属于一个对象,也可以用来变量一个对象的属性 1. 判断属性属于对象 var mycar = {make: "Honda", ...