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 节课程 ...
随机推荐
- THUWC2019 划水记
Day -2 在学校呆了inf天之后终于回家了! Day 0 在家无(tui)所(fei)事(mo)事(yu),顺便被拉出去剪了个头发,想写写thusc2017的题也写不动,一直在网上冲浪,到处乱翻以 ...
- 洛谷P1427 小鱼的数字游戏
题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了).这对小鱼的 ...
- YII实现dropDownList 联动事件
因功能需求,需要用到联动,特此记录分享 一.视图中 <div class="main-form"> <?php $form = ActiveForm::begin ...
- Oracle数据库性能优化基础
1.数据处理分类OLTP,OLAP 2.Oracle特性 3.数据库优化方法论/原则 方法论:自顶向下优化和自底向上优化 3.1 自顶向下优化 3.2 自底向上优化 对于多年的老系统出现性能问题时,就 ...
- EasyUI闪屏,EasyUI页面加载提示:原理+代码+效果图
使用EasyUI时,有个经常遇到的问题,页面还没有渲染完成的时候,就展现了. 刚刚开始很混乱,等加载完成后,就好了. 参考这篇文章http://blog.csdn.net/zheng0518/arti ...
- 关于struts值栈的总结,前端页面如何使用标签取得值栈中的数据
用户提交一次请求的执行过程 总结: struts值栈中 两个内容 一个是栈 一个是map 值栈(数据中心)的范围是一个请求 它代替了request作用域 struts自定义标签有一个特点 比如遍历集合 ...
- 最大团&稳定婚姻系列
[HDU] 1530 Maximum Clique 1435 Stable Match 3585 maximum shortest distance 二分+最大团 1522 Marriage is ...
- 多个API接口
青云客智能聊天机器人API 为保证接口稳定,API接口正式启用 api.qingyunke.com,www.qingyunke.com 如何更换API接口地址? 答:如果您的API接口是用在微信公众号 ...
- 【转】.NET MVC控制器分离到类库的方法
在.ASP.NET MVC的开发中,我们创建完项目之后,ASP.NET MVC是已Model-Controller-View的形式存在的,在创建项目自动生成的内容上Model我们很容易分离成类库,所以 ...
- Hua Wei 机试题目二
题目描述:假设1元,5元,10元,50元,100元的人民币若干,实现一个能找到最少张数累计达到一个指定金额方法.如:67元,可分为67个1元钱.也可分为6个10元7个1元,其中最少人民币分法为一张50 ...