NOIP2016 DAY1 T3 换教室
换教室
Description
Input
Output
Sample Input
2 1 2
1 2 1
0.8 0.2 0.5
1 2 5
1 3 3
2 3 1
Sample Output
#include<cstdio>
#include<cstring>
#include<algorithm>
#define V 320
#define N 2009
using namespace std; int dist[V][V]; //两点距离
int n,m,v,e;
int c[N],d[N]; //c数组 与 d数组
double k[N]; double dp[N][N][]; //设状态dp[i][j][0/1]为前i个时间段中,申请了j个,第i个申不申请时的最小期望,因为此期望可以线性相加
//所以动态转移方程为
//dp[i][j][0] = min(dp[i-1][j][0]+dist[c[i-1]][c[i]],dp[i-1][j][1]+dist[c[i-1]][c[i]]*(1-k[i-1])+ dist[d[i-1]][c[i]]*k[i])
//dp[i][j][1] = min(dp[i-1][j-1][0]+dist[c[i-1]][d[i]]*k[i]+dist[c[i-1]][c[i]]*(1-k[i]),dp[i-1][j-1][1]+dist[c[i-1]][c[i]]*(1-k[i-1])*(1-k[i])
// + dist[c[i-1]][d[i]]*(1-k[i-1])*k[i] + dist[d[i-1]][c[i]]*k[i-1]*(1-k[i-1])+dist[d[i-1]][d[i]] * k[i-1]*k[i]); int read(){ //读入优化
int x = ;
char ch = getchar();
while(ch > '' || ch < '')ch = getchar();
while(ch >= '' && ch <= ''){
x = x * + ch - '';
ch = getchar();
}
return x;
} void floyd(){
for(int k = ; k <= v; k++)
for(int a = ; a <= v; a++)
for(int b = ; b <= v; b++)
dist[a][b] = min(dist[a][b],dist[a][k]+dist[k][b]);
} void DP(){
for(int i = ; i <= v; i++)dist[i][i] = ;
for(int i = ; i <= n; i++)
for(int j = ; j <= m; j++)
dp[i][j][] = dp[i][j][] = 1e30;
dp[][][] = dp[][][] = ;
for(int i = ; i <= n; i++){
int li = min(i,m);
for(int j = ; j <= li; j++){
dp[i][j][] = min(dp[i-][j][] + dist[c[i-]][c[i]],dp[i-][j][]+dist[d[i-]][c[i]]*k[i-]+dist[c[i-]][c[i]]*(-k[i-]));
if(j == )continue;
double x1 = dp[i-][j-][]+dist[c[i-]][d[i]]*k[i]+dist[c[i-]][c[i]]*(-k[i]);
double x2 = dp[i-][j-][]+dist[c[i-]][c[i]]*(-k[i-])*(-k[i])+dist[c[i-]][d[i]]*(-k[i-])*k[i];
x2 +=dist[d[i-]][c[i]]*k[i-]*(-k[i])+dist[d[i-]][d[i]]*k[i-]*k[i];
dp[i][j][] = min(x1,x2); }
} } int main(){
memset(dist,0x3f,sizeof(dist));
n = read(),m = read(),v = read(),e = read();
for(int i = ; i <= n; i++)c[i] = read();
for(int i = ; i <= n; i++)d[i] = read();
for(int i = ; i <= n; i++)scanf("%lf",&k[i]);
for(int a = ; a <= e; a++){
int u = read(),vv = read(),d = read();
if(u == vv)continue;
if(dist[u][vv] < d)continue;
dist[u][vv] = dist[vv][u] = d;
}
floyd();
DP();
double ans = 1e30;
for(int i = ; i <= m; i++)ans = min(ans,min(dp[n][i][],dp[n][i][]));
printf("%.2f\n",ans);
return ;
}
NOIP2016 DAY1 T3 换教室的更多相关文章
- 【NOIP2016】Day1 T3 换教室(期望DP)
题目背景 NOIP2016 提高组 Day1 T3 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n 节课程安排在 n 个时间段上. ...
- 【NOIP2016提高组】 Day1 T3 换教室
题目链接:https://www.luogu.org/problemnew/show/P1850 此题正解为dp. 我们先用floyd处理出任意两个教室之间的距离,用dis[i][j]表示. 用f[i ...
- [NOIp2016提高组]换教室
题目大意: 有n节课,第i节课在c[i]上课,同时d[i]也有一节课d[i]. 你有权利向教务处发出m次申请把自己的教室改到d[i],相应的批准概率是k[i]. 教室是图上的一些点,其中每条边都有边权 ...
- Luogu P1850 [NOIp2016提高组]换教室 | 期望dp
题目链接 思路: <1>概率与期望期望=情况①的值*情况①的概率+情况②的值*情况②的概率+--+情况n的值*情况n的概率举个例子,抛一个骰子,每一面朝上的概率都是1/6,则这一个骰子落地 ...
- 【NOIP2016提高组day1】换教室
题目 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的 课程. 在可以选择的课程中,有 2n 节课程安排在 n 个时间段上. 在第 i ( 1 ≤ i ≤ n )个 时间段上,两 ...
- 洛谷 1850 NOIP2016提高组 换教室
[题解] 先用floyed处理出两点间的最短路. 设f[i][j][k]表示走到第i个教室,总共换了j次,当前换或者不换,期望的最小移动距离. 分情况讨论来转移即可. #include<cstd ...
- 【学术篇】NOIP2016 D1T3 luogu1850换教室
题目链接:点击这里献出你宝贵的时间(是用来做题不是捐赠Emmmm).. Emmmm我太弱了= = 做完这题我觉得我应该去打星际..这题怎么就有重边了呢.. 这题就是一道期望= =当时考场上好像完全不会 ...
- 题解 P1850 [NOIP2016 提高组] 换教室
做完这道题才略微感觉自己懂了一点关于概率与期望的知识QAQ... 一:关于概率与期望的定义 转载节选于blog 1.什么是数学期望? 数学期望亦称期望.期望值等.在概率论和统计学中,一个离散型随机变量 ...
- [NOIP2016][luogu]换教室[DP]
[NOIP2016] Day1 T3 换教室 ——!x^n+y^n=z^n 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n 节课程 ...
随机推荐
- sql2008删除语句.txt
delete from [aixinxing].[dbo].[bbs2] where announceID in (select AnnounceID from [aixinxing].[dbo].[ ...
- js中数组常用方法
1.Array.push() 此方法是在数组的后面添加新加元素,此方法改变了数组的长度: var aa=[1,2,3]; var bb=aa.push(4,5); console.log(bb) ...
- Edit Distance FZU-1434
题目大意: 给你两个字符串A,B,和以下三种操作: 1.删除一个字符 2.插入一个字符 3.把一个字符改变成另一个字符 求使A变成B所需要的最少的操作: 我刚开始的思路是以为求出最长公共子序列,然后对 ...
- BZOJ 1197 [HNOI2006]花仙子的魔法 (数学题)
题面:洛谷传送门 BZOJ传送门 非常有意思的一道数学题,浓浓的$CF$风,然而我并没有想出来.. 我们想把一个$n$维空间用$n$维球分成尽可能多的块 而新增加一个$n$维球时,肯定要尽可能多地切割 ...
- Swoole 源码分析——基础模块之 Pipe 管道
前言 管道是进程间通信 IPC 的最基础的方式,管道有两种类型:命名管道和匿名管道,匿名管道专门用于具有血缘关系的进程之间,完成数据传递,命名管道可以用于任何两个进程之间.swoole 中的管道都是匿 ...
- Innodb性能优化之参数设置
现在,Innodb是Mysql最多使用的存储引擎.其性能一直广受关注.本文通过基本的参数设置来提高其性能. innodb_buffer_pool_size 缓冲池大小.这是innodb参数中最重要的设 ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 用SPD开发SharePoint应用程序
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 用SPD开发SharePoint应用程序 非常多开 ...
- JAVA程序设计(11)-----面对对象0基础设计 麻将 创建麻将牌 然后洗牌 发牌~ 恩 就这样
zzzzZZZZ 1.開始还想贴图的 实在太懒了-- 这是一张麻将 package com.lovo; import java.awt.Graphics; import java.awt.Image; ...
- sql查询语句中的乱码 -- 前面加N
直接运行sql出出现乱码,在中文字符前加N就能够正常显示了.N的含义就是用nvarchar格式显示.
- apple Swift语言新手教程
Apple Swift编程语言新手教程 文件夹 1 简单介绍 2 Swift入门 3 简单值 4 控制流 5 函数与闭包 6 对象与类 7 枚举与结构 1 ...