LibreOJ #6177. 「美团 CodeM 初赛 Round B」送外卖2【状压DP】
「美团 CodeM 初赛 Round B」送外卖2
内存限制:32 MiB
时间限制:200 ms
题目描述
一 张 n 个 点 m 条 有 向 边 的 图 上 , 有 q 个 配 送 需 求 , 需 求 的 描 述 形 式 为 (si,ti,li,ri), 即需要从点 si 送到 ti, 在时刻 li 之后( 包括 li ) 可以在 si 领取货物, 需要在时刻 ri 之前( 包括 ri) 送达 ti, 每个任务只需完成一次。
图上的每一条边均有边权, 权值代表通过这条边消耗的时间。 在时刻 0 有一个工作人员在点 1 上, 求他最多能完成多少个配送任务。
在整个过程中, 可以认为领货跟交货都是不消耗时间的, 时间只花费在路程上。 当然在一个点逗留也是允许的。
输入格式
第一行, 三个正整数 n,m,q(2≤n≤20,1≤m≤400,1≤q≤10)
接下来 m 行, 每行三个正整数 ui,vi,ci(1≤ui,vi≤n,1≤ci≤20000)表示有一条从ui 到 vi 耗时为 ci 的有向边。
接下来 q 行, 每行四个正整数 si,ti,li,ri(1≤si,ti≤n,1≤li≤ri≤10^6), 描述一个配送任务。
输出格式
一个整数,表示最多能完成的任务数量。
样例
样例输入
5 4 3
1 2 1
2 3 1
3 4 1
4 5 1
1 2 3 4
2 3 1 2
3 4 3 4样例输出
2
样例解释
工作人员可以在时刻 1 到达点 2 ,领取第二个货物后在时刻 2 到达点 3 后交货,逗留到时刻 4 ,领取第三个货物,在时刻 4 到达点 4 并交货。
解题报告
每个货物的装填无非是三种:
1. 没拿
2. 拿在手上
3. 送到了
那么就简单了,写一个状压DP,压三位,表示三个状。我们肯定走最短路径,那么就先刷一趟最短路,然后分类讨论,就可以了。
代码如下
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 25
using namespace std;
int Ans,n,m,q,Three[MAXN],All,dst[MAXN][MAXN],INF;
struct xcw{int S,T,l,r;}a[MAXN];
int f[MAXN][60005*3];
void work(){memset(f,63,sizeof(f));INF=f[0][0];f[1][0]=0;for(int k=0;k<All;k++)for(int i=1;i<=n;i++)for(int j=1;j<=q;j++){int t=k%Three[j+1]/Three[j];if(t==0) if(f[i][k]+dst[i][a[j].S]<=a[j].r) f[a[j].S][k+Three[j]]=min(f[a[j].S][k+Three[j]],max(a[j].l,f[i][k]+dst[i][a[j].S]));if(t==1) if(f[i][k]+dst[i][a[j].T]<=a[j].r) f[a[j].T][k+Three[j]]=min(f[a[j].T][k+Three[j]], f[i][k]+dst[i][a[j].T] );}
}
int main(){
// freopen("prob.in","r",stdin);
// freopen("prob.out","w",stdout);scanf("%d%d%d",&n,&m,&q);memset(dst,63,sizeof(dst));for(int i=1;i<=n;i++) dst[i][i]=0;for(int i=1;i<=m;i++){int x,y,w;scanf("%d%d%d",&x,&y,&w);dst[x][y]=min(dst[x][y],w);}for(int i=1;i<=q;i++) scanf("%d%d%d%d",&a[i].S,&a[i].T,&a[i].l,&a[i].r);for(int k=1;k<=n;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) dst[i][j]=min(dst[i][j],dst[i][k]+dst[k][j]);Three[1]=1;for(int i=2;i<=q+1;i++) Three[i]=Three[i-1]*3;All=Three[q+1];work();for(int k=0;k<All;k++)for(int i=1;i<=n;i++)if(f[i][k]<INF){int Now=0;for(int j=1;j<=q;j++) Now+=((k%Three[j+1]/Three[j])==2);Ans=max(Ans,Now);}printf("%d\n",Ans);return 0;
}
转载于:https://www.cnblogs.com/XSamsara/p/9059393.html
LibreOJ #6177. 「美团 CodeM 初赛 Round B」送外卖2【状压DP】相关推荐
- 「美团 CodeM 初赛 Round B」送外卖2
题目描述: 一张n个点m条有向边的图上,有q个配送需求,需求的描述形式为(si,ti,li,ri),即需要从点si送到ti,在时刻li之后(包括li)可以在si领取货物,需要在时刻ri之前(包括ri) ...
- 【LOJ6178】 「美团 CodeM 初赛 Round B」景区路线规划 期望概率DP
题目链接 LOJ 题解 考虑进行Dp,我们设 f[i][j] f [ i ] [ j ] f[i][j]表示到达节点 i i i消耗了j" role="presentation&q ...
- #6164. 「美团 CodeM 初赛 Round A」数列互质-莫队
#6164. 「美团 CodeM 初赛 Round A」数列互质 思路 : 对这个题来言,莫队可以 n*根号n 离线处理出各个数出现个的次数 ,同时可以得到每个次数出现的次数 , 但是还要处理有多少 ...
- Codeforces Round #585 (Div. 2) E. Marbles 状压dp + 逆序对
传送门 文章目录 题意: 思路: 题意: 思路: 考虑数列最终的状态一定是相同颜色在一起,所以我们发现他的颜色是有顺序的!显然可以用状压dpdpdp来枚举颜色的顺序,但是又有问题了,你怎么确定当前这个 ...
- [美团 CodeM 初赛 Round A]最长树链
题目大意: 给你一棵带点权的树,找出一个最长的树链满足链上点权的最大公因数不为1. 思路: 暴力DP. 对于每个点,记录一下以这个点为一个端点的所有链的最大公因数及长度. 然后暴力转移一下,时间复杂度 ...
- Educational Codeforces Round 13 E. Another Sith Tournament 状压dp
E. Another Sith Tournament 题目连接: http://www.codeforces.com/contest/678/problem/E Description The rul ...
- Codeforces Beta Round #8 C. Looking for Order 状压dp
题目链接: http://codeforces.com/problemset/problem/8/C C. Looking for Order time limit per test:4 second ...
- 美团北京,今日起无人驾驶送外卖
杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 自动驾驶落地,载物快于载人已是共识. 在这个领域,最具场景优势和最不容忽视的玩家--美团,最近就有一系列动向. 比如,刚融资100亿美元,用 ...
- LibreOJ 6514. 「雅礼集训 2018 Day10」文明【虚树+LCA】
6514. 「雅礼集训 2018 Day10」文明 [题目描述] 传送门 [题解] 考虑笨蛋的写法,可以用LCA求出1号和其他点的中点,然后DFS搜索Size大小即可,但是,复杂度显然要炸,但是我们会 ...
最新文章
- matlab同窗口显示图片,[求助]关于GUI的问题,如何在同一窗口里显示四副图片...........
- C语言在有序的数组是否存在固定点(附完整源码)
- 概率分布:PMF与PDF
- emacs c语言 自动补全,Emacs 与 C/C++ 代码自动补全
- apm java_非Java专家的APM:什么泄漏?
- 第11章 路由器OSPF动态路由配置
- 织梦在线艺术字体转换生成平台网站源码
- python 列表 元祖 字典 集合_python中列表、元祖、字典和集合
- 如何查看电脑上是否安装有IIS服务
- 我应该做哪个行业的销售
- Savage(扩展欧几里得)
- php地名转换成拼音,php汉字转拼音_php中怎么将中文转换拼音
- MacOS Mojave 更换开机登录界面壁纸
- MATLAB代码:电-气-热综合能源系统耦合优化调度 关键词:综合能源系统 优化调度 电气热耦合 主要内容:代码主要做的是一个考虑电网、热网以及气网耦合调度的综合能源系统优化调度模型
- 利用神经网络预测链家网上海租房价格(Python)
- 审慎 合宜与慈善三种学派的分类与核心思想
- 男士必须收藏:男士健身方案
- Manacher算法的基础应用:小A的回文串
- 75个顶级开源安全应用(1)
- 芯片CP/FT测试的基本概念理解