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 节课程 ...
随机推荐
- Tab 切换效果
今天写的两个小效果都是为了测试我写的单参函数,结果还是有点成功的~~此处是不是想发表情包! Tab效果很简单,这里我就不赘述了,直接上代码: html代码: <div class="c ...
- webpack使用中遇到的相关问题
问题一:使用webpack打包jquery后,在页面使用错误信息:$ is not defined new webpack.ProvidePlugin({ "$": "j ...
- Ansible常见问题处理
1.ansible all -m ping报错,信息如下: [WARNING]: log file at /var/log/ansible.log is not writeable and we ca ...
- docker 私有仓库的两种方式
1.使用官方默认的registry镜像构建本地仓库 这种方式适用于小规模的镜像仓库储存,没有Ui界面 (1)docker pull registry (2)docker run -d -p 5000: ...
- Zend 官方框架增加 Swoole 协程支持 !
前言 Zend Framework 是 PHP 的官方框架,随着 Zend-Expressive-Swoole 0.2.2 的发布,率先支持了 Swoole 4 的协程功能,现在可以仅通过一个配置即可 ...
- Ubuntu下安装Tensorflow
本文目录 引言 基于Anaconda的tensorflow安装 1 下载linux版本的Anaconda安装包 2 安装Anaconda 利用anaconda安装tensorflow 1 建立一个 c ...
- C#基础--索引器
classProgram { staticvoidMain(string[] args) { man mm =new man(); mm[0]="jingya"; mm[1]=&q ...
- bzoj 1266 1266: [AHOI2006]上学路线route
1266: [AHOI2006]上学路线route Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 2356 Solved: 841[Submit][S ...
- GA求解TSP
遗传算法中包含了如下5个基本要素: (1)对参数进行编码: (2)设定初始种群大小: (3)适应度函数的设计: (4)遗传操作设计: (5)控制参数设定(包括种群大小.最大进化代数.交叉率.变异率等) ...
- Mybatis分页插件2.0版本号公布
项目地址:http://git.oschina.net/free/Mybatis_PageHelper 软件介绍:http://www.oschina.net/p/mybatis_pagehelper ...