题解【AcWing274】移动服务
非常好的优化 \(\text{DP}\) 状态表示的题目。
首先可以设 \(dp_{i,x,y,z}\) 表示已经做完了前 \(i\) 个请求,现在的 \(3\) 名服务员分别在 \(x\) 、\(y\) 、\(z\) 处的最小花费。
然而这样做时间和空间都会爆炸。
考虑如何优化。
我们注意到做完第 \(i\) 个请求时一定会有一个服务员停留在 \(p_i\) 处,于是可以压掉一维状态。
所以状态就变成了 \(dp_{i,x,y}\) 表示做完了前 \(i\) 个请求,另外 \(2\) 个服务员分别在 \(x\) 和 \(y\) 处的最小花费。
转移的话,枚举下一个请求是由谁做,加上他的位置与下一个请求的位置之间的花费即可。
#include <bits/stdc++.h>
#define DEBUG fprintf(stderr, "Passing [%s] line %d\n", __FUNCTION__, __LINE__)
#define itn int
#define gI gi
using namespace std;
typedef long long LL;
typedef pair <int, int> PII;
typedef pair <int, PII> PIII;
inline int gi()
{
int f = 1, x = 0; char c = getchar();
while (c < '0' || c > '9') {if (c == '-') f = -1; c = getchar();}
while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return f * x;
}
const int maxn = 203, maxm = 1003;
int n, m, l, dp[maxm][maxn][maxn], c[maxm][maxm], p[maxm];
int main()
{
//freopen(".in", "r", stdin);
//freopen(".out", "w", stdout);
l = gi(), n = gi();
for (int i = 1; i <= l; i+=1)
{
for (int j = 1; j <= l; j+=1)
{
c[i][j] = gi();
}
}
for (int i = 1; i <= n; i+=1) p[i] = gi();
//dp 初始化
memset(dp, 0x3f, sizeof(dp));
p[0] = 3;
dp[0][1][2] = 0;
for (int i = 0; i < n; i+=1)
{
for (int x = 1; x <= l; x+=1)
{
for (int y = 1; y <= l; y+=1)
{
int z = p[i], nxt = p[i + 1];
if (x == y || x == z || y == z) continue;
dp[i + 1][x][y] = min(dp[i + 1][x][y], dp[i][x][y] + c[z][nxt]); //z 去做
dp[i + 1][z][y] = min(dp[i + 1][z][y], dp[i][x][y] + c[x][nxt]); //x 去做
dp[i + 1][x][z] = min(dp[i + 1][x][z], dp[i][x][y] + c[y][nxt]); //y 去做
}
}
}
int ans = 1000000003;
for (int x = 1; x <= l; x+=1)
{
for (int y = 1; y <= l; y+=1)
{
int z = p[n];
if (x == y || y == z || z == x) continue;
ans = min(ans, dp[n][x][y]);
}
}
printf("%d\n", ans);
return 0;
}
题解【AcWing274】移动服务的更多相关文章
- Acwing P274 移动服务 题解
每日一题 day21 打卡 Analysis DP的状态为已经完成的请求数量,通过指派一位服务员可以把”完成i - 1个请求的状态”转移到”完成i个请求的状态”那么我们可以知道转移从dp[i - 1] ...
- 1820: [JSOI2010]Express Service 快递服务
1820: [JSOI2010]Express Service 快递服务 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 847 Solved: 325 ...
- PAT 甲级真题题解(1-62)
准备每天刷两题PAT真题.(一句话题解) 1001 A+B Format 模拟输出,注意格式 #include <cstdio> #include <cstring> #in ...
- 【BZOJ1820】[JSOI2010]快递服务(动态规划)
[BZOJ1820][JSOI2010]快递服务(动态规划) 题面 BZOJ 洛谷 题解 考虑无脑四维\(dp\).\(f[i][a][b][c]\),表示当前处理到第\(i\)个任务,三辆车的位置分 ...
- 【BZOJ1820】[JSOI2010]Express Service 快递服务 暴力DP
[BZOJ1820][JSOI2010]Express Service 快递服务 Description 「飞奔」快递公司成立之后,已经分别与市内许多中小企业公司签订邮件收送服务契约.由于有些公司是在 ...
- Bzoj 1229: [USACO2008 Nov]toy 玩具 题解 三分+贪心
1229: [USACO2008 Nov]toy 玩具 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 338 Solved: 136[Submit] ...
- ACM团队周赛题解(1)
这次周赛题目拉了CF315和CF349两套题. 因为我代码模板较长,便只放出关键代码部分 #define ll long long #define MMT(s,a) memset(s, a, size ...
- Vulnhub靶场题解
Vulnhub简介 Vulnhub是一个提供各种漏洞环境的靶场平台,供安全爱好者学习渗透使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行 ...
- Spring cloud微服务安全实战-4-1章节概述
过渡到复杂的微服务场景下面. 搭建起一个简单的微服务架构,一个网关,一个安全中心,两个微服务,然后会看到如何将安全相关的问题解构出来放在网关上. 然后与OAuth协议整合起来.
随机推荐
- vue实现打印功能
通过npm 安装插件 1.安装 npm install vue-print-nb --save 2.引入 安装好以后在main.js文件中引入 import Print from 'vue-pri ...
- Travase Objects and four method of array
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- MyBatis的延迟加载和缓存机制
延迟加载: 什么是延迟加载: MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟规则推迟对关联对象的select查询.延迟加载可以有效的减少数据库压力. MyBatis根据对 ...
- 【Newtonsoft.Json】json序列化小驼峰格式(属性名首字母小写)
我是一名 ASP.NET 程序员,专注于 B/S 项目开发.累计文章阅读量超过一千万,我的博客主页地址:https://www.itsvse.com/blog_xzz.html 只需要设置JsonSe ...
- Tomcat开启JMX监控
搭建模拟环境: 操作系统:centos7内存:1Gjdk:1.8.0_131tomcat:8.0.48 环境准备我们这里就不直接演示了,直接配置tomcat的jmx 1.进入到tomcat的bin目录 ...
- JS: javascript 点击事件执行两次js问题 ,解决jquery绑定click事件出现点击一次执行两次问题
javascript 点击事件执行两次js问题 在JQuery中存在unbind()方法,先解绑再添加点击事件,解决方案为: $(".m-layout-setting").unbi ...
- dcloud_base连接失败(root:admin123!@#qwe@tcp(192.168.8.205:3306)/dcloud_base) Error 1129: Host '192.168.8.205' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
mysql -uroot -p admin123!@#qwe show global variables like '%max_connect_errors%'; set global max_con ...
- 【JavaScript Weekly】#471 — JANUARY 17, 2020
https://javascriptweekly.com/issues/471 #471 — JANUARY 17, 2020 READ ON THE WEB JavaScript Weekly Ba ...
- [SNOI2017]炸弹[线段树优化建图]
[SNOI2017]炸弹 线段树优化建图,然后跑一边tarjan把点全部缩起来,炸一次肯定是有连锁反应的所以整个连通块都一样-于是就可以发现有些是只有单向边的不能忘记更新,没了. #include & ...
- yii2 钩子函数
插入时间 public function beforeSave($insert) { $this->created_at=time(); return parent::beforeSave($i ...