题解 [美团 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 ...
随机推荐
- ACM金牌选手算法讲解《线性表》
哈喽,大家好,我是编程熊,双非逆袭选手,字节跳动.旷视科技前员工,ACM亚洲区域赛金牌,保研985研究生,分享算法与数据结构.计算机学习经验,帮助大家进大厂~ 公众号:『编程熊』 文章首发于: ACM ...
- Pandas高级教程之:window操作
目录 简介 滚动窗口 Center window Weighted window 加权窗口 扩展窗口 指数加权窗口 简介 在数据统计中,经常需要进行一些范围操作,这些范围我们可以称之为一个window ...
- C语言:数组数据交换
//交换数组中各个变量的值:第1和最后一个交换,第2与倒数第二个交换 #include <stdio.h> int main() { int a[]={1,2,3,4,5,6,7,8,9} ...
- python_字典列表嵌套的排序问题
上一篇我们聊到python 字典和列表嵌套用法,这次我们聊聊字典和列表嵌套中的排序问题,这个在python基础中不会提到,但实际经常运用,面试中也喜欢问,我们娓娓道来. 在说组合排序之前,先来看看排序 ...
- 初识Stream API + Lambda表达式
使用新特性简化代码,增强可读性 package com.gg.java8; import java.util.*; import org.junit.Test; public class TestLa ...
- odoo里的javascript学习---自定义插件
插件效果图 定义js odoo.define('auto_widget',function(require){ "use strict"//通过扩展AbstractField来扩展 ...
- Python自动化测试面试题-MySQL篇
目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...
- 查看python中所有的关键字
import keyword keyword.kwlist ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'br ...
- centos 7 网络静态IP配置文件
TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=staticIPADDR=10.86.128.160GETWAY=10.86.128.1P ...
- ip地址分配
目录 一.子网划分基础 二.子网划分的原理 三.IP地址汇总 四.ip地址规划 一.子网划分基础 二进制: 特点:基数为2,数值部分用2个不同的数字符号0.1表示逢二进一 IP地址:IP地址由32位二 ...