蒟蒻の算法题(~~完全不会~~的期望)01
tips:就是要用~~表示删除 太蒻了
现在有一张图, 有 v<=300v<=300 个节点
你需要从 c1c1 到 c2c2 到 cn(n<=2000)cn(n<=2000)
现在你有 mm 次机会把 cici 换为 didi, 对于第 ii 个, 成功的概率为 kiki
求走完整个路程的期望路径长度
本题为期望 dpdp , 从上一个状态转移过来(听dalao说还有一种是计算本状态对后面状态的贡献)
具体来说, 这个状态可以由以上 nn 个状态得到, 每个状态权值为 wiwi, 其中第 ii 个状态到此状态的概率为 kiki, 那么有此状态可以表示为
dp[now]=∑i=1nwi∗ki
本题状态为:
dp[i][j][0/1]dp[i][j][0/1] 代表选到第 ii 门课用掉 jj 次机会, 此次申请或不申请的期望值
所有转移详细记录在注释中
答案自然在 minmi=0min(dp[n][i][0],dp[n][i][1])
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define REP(i, x, y) for(int (i) = (x);(i) <= (y);(i)++)
using namespace std;
int RD(){int out = 0,flag = 1;char c = getchar();while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}return flag * out;}
const int maxn = 4019, maxv = 319;
int num, numc, numv, nr;
int map[maxv][maxv];
int c[maxn], d[maxn];
double k[maxn];
double dp[maxn][maxn][2];
void floyd(){REP(i, 1, numv)map[i][i] = 0;REP(k, 1, numv)REP(i, 1, numv)REP(j, 1, numv){map[i][j] = min(map[i][j], map[i][k] + map[k][j]);}}
int dist(int x, int y){return map[x][y];}
void init(){REP(i, 1, numv)REP(j, 1, numv)map[i][j] = 1e9;REP(i, 1, num)REP(j, 0, numc)dp[i][j][0] = dp[i][j][1] = 1e9;}
int main(){num = RD(), numc = RD(), numv = RD(), nr = RD();init();REP(i, 1, num)c[i] = RD();REP(i, 1, num)d[i] = RD();REP(i, 1, num)cin>>k[i];REP(i, 1, nr){int u = RD(), v = RD(), dis = RD();map[u][v] = min(map[u][v], dis);map[v][u] = map[u][v];}floyd();dp[1][0][0] = dp[1][1][1] = 0;//选或不选都为起点REP(i, 2, num){int m = min(numc, i);REP(j, 0, m){//可以不申请换教室, 从0开始dp[i][j][0] = min(//本次不申请dp[i - 1][j][0] + dist(c[i], c[i - 1]),//上次不申请dp[i - 1][j][1]//上次申请+ dist(c[i], d[i - 1]) * k[i - 1]//申请成功+ dist(c[i], c[i - 1]) * (1 - k[i - 1])//申请失败);if(!j)continue;dp[i][j][1] = min(//本次申请dp[i - 1][j - 1][0]//上次不申请+ dist(d[i], c[i - 1]) * k[i]//本次成功+ dist(c[i], c[i - 1]) * (1 - k[i]), //本次失败dp[i - 1][j - 1][1]//上次申请+ dist(c[i], c[i - 1]) * (1 - k[i]) * (1 - k[i - 1])//0->0+ dist(d[i], c[i - 1]) * k[i] * (1 - k[i - 1])//0->1+ dist(c[i], d[i - 1]) * (1 - k[i]) * k[i - 1]//1->0+ dist(d[i], d[i - 1]) * k[i] * k[i - 1]//1->1);}}double ans = 100000019;REP(i, 0, numc){ans = min(ans, dp[num][i][0]);ans = min(ans, dp[num][i][1]);}printf("%.2lf\n", ans);return 0;}
蒟蒻の算法题(~~完全不会~~的期望)01相关推荐
- NOIP 2015 蒟蒻做题记录
昨天做了noip 2015 的题.因为之前做过几道,最开始做的很快,也都A了.可是子串斗地主运输计划什么的这些没做过的题还是把我恶心的不行QAQ我这个大蒟蒻还是没有A掉..所以说先写一下应该得到的暴力 ...
- [颓废史]蒟蒻的刷题记录
QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...
- 蒟蒻君的刷题日记Day12(线段树专题T4):P8082 [COCI2011-2012#4] KEKS 线段树版题解
解题思路 看题解区的大佬们用的都是单调栈,本蒟蒻献上一篇线段树题解. 整个数最大,首先位数是确定的,则肯定优先考虑高位大小. 大体思路就是从前向后依次求出每一位的值(好像是废话). 对于第 iii 位 ...
- 本蒟蒻对于二分图一些定理的理解
本蒟蒻对于二分图一些定理的理解 先给出一些定理 (常识) 1.对于一个无向图 G,若 G 中的所有回路长度均为偶数,则G为一个二分图. 2.二分图的最小点覆盖 = 最大匹配数. 3.二分图的最大独立集 ...
- 蒟蒻的五周总结(解释引用)《挑战》
一:尺取法: 解释摘自:(12条消息) 尺取法 - 详解 + 例题模板(全)_lxt_Lucia的博客-CSDN博客_尺取法 引用:顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组 ...
- 第十六届全国大学生智能车竞赛(安徽赛区)信标组蒟蒻的想法
前言:作为一名准大三的软件工程学生,刚刚结束了他的为期十几天的智能车之旅,学习了很多,受益匪浅. 1. 什么是智能车? 印象里面好像就是一个车在赛道上跑,然后一群人在哪里看着它跑,就像遥控车那样简单, ...
- CSP 2020 S 蒟蒻的游记 (洛谷同步)
我是傻逼,第一次考,太没有经验了 T1: 毒瘤模拟- 我 if + 计算函数 打+调了2小时 ... 样例WA了 心态炸了- T2. 我没学过如何计算并保存一个数的每一个二进制位- 但是,蒟蒻也是个S ...
- 二本蒟蒻的带牌退役感言(感谢两年来的acm经历)
TP 20年10月 20年 - 21年 寒假 22年开始,大二下 暑假后,怎么就大三了,时间好快 第47届icpc杭州站 尾声 润~ 20年10月 一个高考发挥失常的蒟蒻来到了化大.他带着不甘和兴奋走 ...
- 一只蒟蒻的A*学习笔记
更多请见DUMBLOG 一只蒟蒻的A* 学习笔记 A* 是啥?? A* 用来干啥?? 首先,A-Star 算法只能用在数据规模很大的搜索题中,这时直接用 BFS 会超时,而利用 启发函数(估价函数) ...
最新文章
- 【100题】第十六题(层序打印树的节点)
- 第十五届全国大学生智能汽车竞赛各分赛区国赛获奖信息
- 2020年春季学期信号与系统课程作业参考答案-第十三次作业
- ViewPager,TabLayout,Fragment实现tabs滑动
- Hibernate的DetachedCriteria使用(含Criteria)
- 漫画:如何找到链表的倒数第n个结点?
- CSS中定位(带你实操代码掌握固定定位、绝对定位与相对定位(子绝父相))
- Android Debug方法
- 官方澄清丨Gartner并未组织评选OpenStack八大厂商
- android 旋转动画,android 动画rotate实现图片不停旋转的效果
- wand(wead and)算法简介与改造,修改为店铺与品牌的关键字搜索
- XSS靶场prompt.ml过关详解
- 系统架构设计笔记(38)—— 工作流设计
- anaconda环境配置pytorch总结,GPU调用失败方法总结
- 为什么商家有了收款二维码还要使用聚合支付?
- navicat的基本使用技巧
- Linux LCD 驱动
- gaitset全代码实现问题总结
- vlookup java_Vlookup的VBA错误处理
- WEB开发中,使用JSON-RPC好,还是RESTful API好?