[Luogu 1850] noip16 换教室
[Luogu 1850] noip16 换教室
好久没有更博客了,先唠嗑一会,花了两天的空闲时间大致做完了昨年的noip真题
虽然在经过思考大部分题目都可出解(天天爱跑步除外),但是并不知道考试时候造化如何。
总之自己这段时间多做好事,多积攒RP,每天RP++
Description
Solution:
首先当你看完这个到题的时候,你应该想到先用floyd跑出任意两点的最短路,这个不解释
然后又是这种求期望值最小,很明显也会想到DP的做法
那么DP的方程?通过发现对于当前第i个课程教室的期望是跟前一个课程的选择与否有关的,
那么最后我们的状态可以表示为 f[n][m][0..1]
接下去就比较容易了,只是需要耐心仔细的分类讨论
1、当前的课不换的情况:
(1)上一节课也没换;
(2)上一节课换了----成功 or 不成功;
2、当前的课换的情况:
(1)当前课成功换了:
a、上一节课换了----上一节课成功 or 不成功
b、上一节课没换;
(2)当前的课换了失败:
a、上一节课换了----上一节课成功 or 不成功
b、上一节课没换;
最后总结一下就是

那么就完成了
注意:转移时候因为多次出现距离可预先用cc,cd,dc,dd来表示 c[i-1] 到 c[i] 等等的距离
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=,M=;
int c[M],d[M],dis[N][N],x,y,z,n,m,v,e;
double f[M][M][],k[M];
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]);
for (int i=;i<=v;++i) for (int j=;j<=v;++j) dis[i][j]=1e9;
for (int i=;i<=e;++i)
scanf("%d%d%d",&x,&y,&z),dis[x][y]=dis[y][x]=min(dis[x][y],z);
for (int i=;i<=v;++i) dis[i][i]=;
for (int kkk=;kkk<=v;++kkk)
for (int i=;i<=v;++i) if (i!=kkk)
for (int j=;j<=v;++j)
if (i!=j&&j!=kkk) dis[i][j]=min(dis[i][kkk]+dis[kkk][j],dis[i][j]);
for (int i=;i<=n;++i) for (int j=;j<=m;++j) f[i][j][]=f[i][j][]=1e9;
f[][][]=f[][][]=0.00; f[][][]=0.00;
for (int i=;i<=n;++i){
int cc=dis[c[i-]][c[i]],cd=dis[c[i-]][d[i]],dc=dis[d[i-]][c[i]],dd=dis[d[i-]][d[i]];
f[i][][]=f[i-][][]+cc;
for (int j=;j<=min(i,m);++j){
f[i][j][]=min(f[i-][j][]+cc,f[i-][j][]+cc*(-k[i-])+dc*k[i-]); f[i][j][]=min(f[i-][j-][]+cd*k[i]+cc*(-k[i]),
f[i-][j-][]+cc*(-k[i-])*(-k[i])+cd*(-k[i-])*k[i]+
dc*k[i-]*(-k[i])+dd*k[i-]*k[i]);
}
}
double ans=1e9;
for (int i=;i<=m;++i)
ans=min(ans,min(f[n][i][],f[n][i][]));
printf("%.2lf",ans);
}
[Luogu 1850] noip16 换教室的更多相关文章
- 「 Luogu P1850 」 换教室
解题思路 很明显的是个期望 $dp$. 先前想到 $dp[i][j]$ 表示第决策到第 $i$ 个时间段,已经进行了 $j$ 次申请,然后就没有然后了,因为这根本就没法转移啊,你又不知道前 $i-1$ ...
- 【Luogu】P1850换教室(期望DP)
题目链接 又一道面向题解编程的恶心神题.真是叫人质壁分离…… 设f[i][j][k]表示考虑了前i节课,尝试了j次,当前申请结果为k时消耗的体力值. 对于f[i][j][0]有两种情况:一是我们的主角 ...
- Luogu 1580 [NOIP2016] 换教室
先用Floyed做亮点之间的最短路,设计dp,记dp[i][j][0]为到第i节课,换了j次课,当前有没有换课达到的期望耗费体力最小值 方程(太长了还是看代码吧):dp[i][j][0]<-dp ...
- 洛谷1850(NOIp2016) 换教室——期望dp
题目:https://www.luogu.org/problemnew/show/P1850 状态里记录的是”上一回有没有申请“,而不是”上一回申请成功否“,不然“申请 j 次”就没法转移了. dou ...
- Bzoj 4720 换教室 (期望DP)
刚发现Bzoj有Noip的题目,只会换教室这道题..... Bzoj 题面:Bzoj 4720 Luogu题目:P1850 换教室 大概是期望DPNoip极其友好的一道题目,DP不怎么会的我想到了,大 ...
- [NOIP2016][luogu]换教室[DP]
[NOIP2016] Day1 T3 换教室 ——!x^n+y^n=z^n 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n 节课程 ...
- Luogu P1850 换教室(期望dp)
P1850 换教室 题意 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有\(2n\)节课程安排在\(n\)个时间段上.在第\(i(1\l ...
- Luogu P1850 [NOIp2016提高组]换教室 | 期望dp
题目链接 思路: <1>概率与期望期望=情况①的值*情况①的概率+情况②的值*情况②的概率+--+情况n的值*情况n的概率举个例子,抛一个骰子,每一面朝上的概率都是1/6,则这一个骰子落地 ...
- luoguP1850 换教室
luoguP1850 换教室 链接 https://www.luogu.org/problemnew/show/P1850 思路 状态很显然就是f[n][k][0/1] 前i次,用了k次机会,当前是在 ...
随机推荐
- vue学习笔记(六)— 关于Vuex可以这样简单理解
关于Vuex可以这样简单理解 作者:狐狸家的鱼 本文链接:关于Vuex GitHub:sueRimn 概念理解 和大多数文章都一样,从概念解释到引出问题再举例解决问题. 官网中,Vuex是状态管理模式 ...
- PHP 魔术方法浅谈
php中把以两个下划线(__)开头的方法称之为魔术方法.魔术方法包括: __construct() 类的构造方法 构建方法时被调用 __destruct() 类的析构方法 明确销毁 ...
- Python 索引切片
#负数开头,只有比负数大才有数据 num = [1,2,3,4,5,6,7,8,9,10] print(num[-5:5]) num = [1,2,3,4,5,6,7,8,9,10] print(nu ...
- Linux内核源码特殊用法
崇拜并且转载的: http://ilinuxkernel.com/files/5/Linux_Kernel_Source_Code.htm Linux内核源码特殊用法 1 前言 Linux内核源码主要 ...
- 洛谷——P3833 [SHOI2012]魔法树
P3833 [SHOI2012]魔法树 题目背景 SHOI2012 D2T3 题目描述 Harry Potter 新学了一种魔法:可以让改变树上的果子个数.满心欢喜的他找到了一个巨大的果树,来试验他的 ...
- 生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)
如果x加上x的各个数字之和得到y,就说x是y的生成元.给出n(1≤n≤100000),求最小 生成元.无解输出0.例如,n=216,121,2005时的解分别为198,0,1979. [分析] 本题看 ...
- 解决高分屏/高DPI下GNOME3/Linux字体和按钮太小的问题
更改系统设置就好了. 我的设备是Surface Pro,12英寸,分辨率2736x1824,在虚拟机里安装CentOS 7后字特别小,标题栏的最小化/最大化/关闭按钮也很小,眼睛受不了的. 更改两个设 ...
- 【codeforces 785E】Anton and Permutation
[题目链接]:http://codeforces.com/problemset/problem/785/E [题意] 给你一个初始序列1..n顺序 然后每次让你交换任意两个位置上面的数字; 让你实时输 ...
- shell面试题整理
1.给一个放有IP的文件,其中一个IP一行,统计哪个IP出现的次数最多. ip_input.txt内容如下: 219.217.49.14 175.43.4.87 87.48.98.1 59.73.38 ...
- angular的又一本好书
MANNING出的<ANGULAR.JS IN ACTION>. 比上本看完的书<ANGULAR ESSENTIAL>多了一些有全局性的东东. 八个关键概念:MODULE,CO ...