题解 [美团 CodeM 初赛 Round B]景区路线规划
有个影响因素k,显然不能高斯消元
n和k都不大,可以直接\(O(nk)\)跑DP
然而带上时间这一影响因素后的转移颇为难写,我从6点直接调到9点最后还是只能dfs爆搜骗了55pts
考场上推方程一定要冷静,调不对再把影响因素都看一遍
我考场上纠结的是\(dp[k][i]\)在什么时候应该继承\(dp[k+1][i]\)
然而考完再看发现根本不需要继承。。。
还是考虑从多个点向一个点转移:
令\(dp[k][i]\)为还剩时间k时,在还剩时间k时经过第i个点次数的期望(实际上就是在第i个点时开心度的期望)
则转移就很显然了:\(dp[k][i] = \sum_{i->v}\frac{1}{cnt[v]}dp[k+c[i]+e.w][v]\)
然而这题还有一个坑点:题里没给边数范围
于是我就默认\(m\leq100\)了 成功RE
应该是不超过\(\frac{N*(N-1)}{2}\)条边
Code:
#include <bits/stdc++.h>
using namespace std;
#define N 110
#define ll long long
//#define int long long
inline int read() {
int ans=0, f=1; char c=getchar();
while (!isdigit(c)) {if (c=='-') f=-f; c=getchar();}
while (isdigit(c)) {ans=(ans<<3)+(ans<<1)+(c^48); c=getchar();}
return ans*f;
}
struct edge{int to, next, val;}e[N*(N-1)/2];
int n, m, k, K;
int head[N], size, cnt[500][N], c[N];
double dp[500][N], h1[N], h2[N]; // 0->小y 1->妹子
double ans1=0, ans2=0;
inline void add(int s, int t, int w) {edge *k=&e[++size]; k->to=t; k->next=head[s]; k->val=w; head[s]=size;}
int main()
{
#ifdef DEBUG
freopen("1.in", "r", stdin);
#endif
n=read(); m=read(); K=read();
for (int i=1; i<=n; ++i) {c[i]=read(); h1[i]=1.0*read(); h2[i]=1.0*read();}
for (int i=1,u,v,w; i<=m; ++i) {u=read(); v=read(); w=read(); add(u, v, w); add(v, u, w);}
for (int i=1; i<=n; ++i) if (K>=c[i]) dp[K-c[i]][i] = 1.0/n;
for (int k=K-1; k>=0; --k) {
for (int i=1; i<=n; ++i) {
if (k>K-c[i] || !dp[k][i]) continue;
for (int j=head[i],v,t; j; j=e[j].next) {
v=e[j].to; t=k-c[v]-e[j].val;
if (t>=0) ++cnt[k][i];
}
if (cnt[k][i]) {
for (int j=head[i],v,t; j; j=e[j].next) {
v=e[j].to; t=k-c[v]-e[j].val;
if (t>=0) dp[t][v] += dp[k][i]/cnt[k][i];
}
}
//dp[k][i] += dp[k+1][i];
ans1 += dp[k][i]*h1[i];
ans2 += dp[k][i]*h2[i];
}
}
#if 0
for (int k=K; k>=0; --k) {
cout<<setw(2)<<k<<' '; for (int i=1; i<=n; ++i) cout<<setw(4)<<dp[k][i]<<' '; cout<<endl;
cout<<setw(2)<<k<<' '; for (int i=1; i<=n; ++i) cout<<setw(4)<<cnt[k][i]<<' '; cout<<endl;
}
#endif
printf("%.5lf %.5lf\n", ans1, ans2);
return 0;
}
题解 [美团 CodeM 初赛 Round B]景区路线规划的更多相关文章
- #6164. 「美团 CodeM 初赛 Round A」数列互质-莫队
#6164. 「美团 CodeM 初赛 Round A」数列互质 思路 : 对这个题来言,莫队可以 n*根号n 离线处理出各个数出现个的次数 ,同时可以得到每个次数出现的次数 , 但是还要处理有多少 ...
- LiberOJ#6178. 「美团 CodeM 初赛 Round B」景区路线规划 概率DP
题意 游乐园被描述成一张 n 个点,m 条边的无向图(无重边,无自环).每个点代表一个娱乐项目,第 i 个娱乐项目需要耗费 ci 分钟的时间,会让小 y 和妹子的开心度分别增加 h1i ,h2i ,他 ...
- 【loj6177】「美团 CodeM 初赛 Round B」送外卖2 Floyd+状压dp
题目描述 一张$n$个点$m$条边的有向图,通过每条边需要消耗时间,初始为$0$时刻,可以在某个点停留.有$q$个任务,每个任务要求在$l_i$或以后时刻到$s_i$接受任务,并在$r_i$或以前时刻 ...
- 「美团 CodeM 初赛 Round A」最长树链
题目描述 Mr. Walker 最近在研究树,尤其是最长树链问题.现在树中的每个点都有一个值,他想在树中找出最长的链,使得这条链上对应点的值的最大公约数不等于1.请求出这条最长的树链的长度. 输入格式 ...
- loj6177 「美团 CodeM 初赛 Round B」送外卖2 最短路+状压dp
题目传送门 https://loj.ac/problem/6177 题解 一直不知道允不允许这样的情况:取了第一的任务的货物后前往配送的时候,顺路取了第二个货物. 然后发现如果不可以这样的话,那么原题 ...
- loj #6177. 「美团 CodeM 初赛 Round B」送外卖2 状压dp floyd
LINK:#6177.美团 送外卖2 一道比较传统的状压dp题目. 完成任务 需要知道自己在哪 已经完成的任务集合 自己已经接到的任务集合. 考虑这个dp记录什么 由于存在时间的限制 考虑记录最短时间 ...
- [美团 CodeM 初赛 Round A]数列互质
题目大意: 给出一个长度为n的数列a1,a2,a3,...,an,以及m组询问(li,ri,ki),求区间[li,ri]中有多少数在该区间中的出现次数与ki互质. 思路: 莫队. f[i]记录数字i出 ...
- [美团 CodeM 初赛 Round A]最长树链
题目大意: 给你一棵带点权的树,找出一个最长的树链满足链上点权的最大公因数不为1. 思路: 暴力DP. 对于每个点,记录一下以这个点为一个端点的所有链的最大公因数及长度. 然后暴力转移一下,时间复杂度 ...
- Loj #6164. 「美团 CodeM 初赛 Round A」数列互质
link : https://loj.ac/problem/6164 莫队傻题,直接容斥做. #include<bits/stdc++.h> #define maxn 100005 #de ...
随机推荐
- 如何统计自动化测试用例的ROI 【投入产出比/投资回报率】
一. 自动化测试的投入有哪些? 1. 自动化测试的软件平台投入 自动化测试平台的开发时间,实施时间. 2. 自动化测试的框架开发投入+框架维护的投入 开发自动化测试脚本使用的框架,例如通过一些现有框 ...
- python得到当前版本号
import sys print(sys.winver) 3.7 # 导入sys模块的argv,winver成员,并为其指定别名v.wv from sys import argv as v, winv ...
- Red Hat系统下安装gcc
这篇是在客户服务器上安装redis碰到的问题.服务器是RedHat,无法直接安装gcc,导致Redis无法安装的解决办法: 1.make redis时候报下面这样的错,原因就是gcc没有安装. ...
- Kubernetes部署-二进制方式
环境配置 一.系统环境 序号 用途 系统 Docker版本 IP地址 1 Master CentOS Linux release 7.6.1810 (Core) 19.03.4 192.168.0.1 ...
- kafka可视化工具
Kafka可视化客户端工具(Kafka Tool 2)的安装和使用 Kafka Tool 2 是一款 Kafka 的可视化客户端工具,可以非常方便的查看 Topic 的队列信息.消费者信息以及 kaf ...
- vulnhub-DC:1靶机渗透记录
准备工作 在vulnhub官网下载DC:1靶机https://www.vulnhub.com/entry/dc-1,292/ 导入到vmware 打开kali准备进行渗透(ip:192.168.200 ...
- 流畅的python--函数
# # -*- coding: utf-8 -*-#from abc import ABC ,abstractclassmethodfrom collections import namedtuple ...
- tomcat与springmvc 结合 之---第18篇 StandContext容器和SpringMVC的监听器的模型
writedby张艳涛 如何使用tomcat的监听器 public class BootStrap_ex06 { public static void main(String[] args) { Ht ...
- SpringBoot自动装配-源码分析
1. 简介 通过源码探究SpringBoot的自动装配功能. 2. 核心代码 2.1 启动类 我们都知道SpringBoot项目创建好后,会自动生成一个当前模块的启动类.如下: import org. ...
- springboot未授权
http://ip/actuator/heapdump http://ip/env http://ip/autoconfig http://ip/info http://ip/trace