每日一题 day21 打卡

Analysis

DP的状态为已经完成的请求数量,通过指派一位服务员
可以把”完成i - 1个请求的状态”转移到”完成i个请求的状态”
那么我们可以知道转移从dp[i - 1] -> dp[i]
dp[i][x][y][z] 代表为第i次选择的情况下,对应的1,2,3号服务员
所对应的位置
那么可以得知
dp[i][arr[i]][y][z] = min(dp[i][arr[i]][y][z], dp[i - 1][x][y][z] + cost[x][arr[i]])
dp[i][x][arr[i]][z] = min(dp[i][x][arr[i]][z], dp[i - 1][x][y][z] + cost[y][arr[i]])
dp[i][x][y][arr[i]] = min(dp[i][x][y][arr[i]], dp[i - 1][x][y][z] + cost[z][arr[i]])

因为肯定有一个位置,继承了上一个的位置
所以保存两个状态就可以了

三种状态转移 pi,x,y
dp[i][x][y] = min(dp[i][x][y], dp[i - 1][x][y] + cost[pi - 1][pi])
dp[i][pi][y] = min(dp[i][pi][y], dp[i - 1][x][y] + cost[x][pi])
dp[i][x][pi] = min(dp[i][x][pi], dp[i - 1][x][y] + cost[y][pi])

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxl 200+10
#define maxn 1000+10
#define INF 2147483647
using namespace std;
inline int read()
{
int x=;
bool f=;
char c=getchar();
for(; !isdigit(c); c=getchar()) if(c=='-') f=;
for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
if(f) return x;
return -x;
}
inline void write(int x)
{
if(x<){putchar('-');x=-x;}
if(x>)write(x/);
putchar(x%+'');
}
int l,n;
int c[maxl][maxl],p[maxn],dp[maxn][maxl][maxl];
signed main()
{
memset(dp,,sizeof(dp));
l=read();n=read();
for(int i=;i<=l;i++)
for(int j=;j<=l;j++)
c[i][j]=read();
for(int i=;i<=n;i++) p[i]=read();
dp[][][]=;
p[]=;
for(int i=;i<=n-;i++)
for(int x=;x<=l;x++)
for(int y=;y<=l;y++)
{
if(x==y||x==p[i]||y==p[i]) continue;
dp[i+][x][y]=min(dp[i+][x][y],dp[i][x][y]+c[p[i]][p[i+]]);
dp[i+][p[i]][y]=min(dp[i+][p[i]][y],dp[i][x][y]+c[x][p[i+]]);
dp[i+][x][p[i]]=min(dp[i+][x][p[i]],dp[i][x][y]+c[y][p[i+]]);
}
int ans=INF;
for(int i=;i<=l;i++)
for(int j=;j<=l;j++)
ans=min(ans,dp[n][i][j]);
write(ans);
return ;
}

请各位大佬斧正(反正我不认识斧正是什么意思)

Acwing P274 移动服务 题解的更多相关文章

  1. Acwing P288 休息时间 题解

    Analysis 首先假设一天的第N小时与后一天的第一个小时不相连, 这种情况下DP转移比较好想 dp[i][j][0/1]dp[i][j][0/1]表示 考虑一天的前i个小时,已经休息了j小时,且第 ...

  2. AcWing P173 矩阵距离 题解

    Analysis 就是一个裸的广搜,每次从是1的点开始找就好啦~~~ #include<iostream> #include<cstdio> #include<cstri ...

  3. AcWing P165 小猫爬山 题解

    Analysis 这道题是搜索,类似于小木棍,加一些剪枝. 第一个剪枝是如果当前的答案已经大于了我们已知的最小答案,不用说直接return返回即可. 第二个剪枝是我们可以将小猫的体重从大到小排序,这样 ...

  4. AcWing P164 可达性统计 题解

    Analysis 这道题我一开始想到的是传递闭包,但是时间复杂度是n³,也开不下30000*30000的数组,所以我想到了拓扑+状态压缩(bitset),从后往前找,把能到达的点能到哪里用位运算赋到上 ...

  5. AcWing P378 骑士放置 题解

    Analysis 这道题跟前几道题差不多,依旧是匈牙利算法求二分图匹配,在连边的时候,要连两个矛盾的位置(即一个骑士和其控制的位置).然后就跑一遍匈牙利算法就好了. #include<iostr ...

  6. ACWing P372 棋盘覆盖 题解

    Analysis 这是一个经典的二分图问题,我们将图进行奇偶染色,注意边界条件的判断.再跑一遍匈牙利算法就行了,跟上一题很像. #include<iostream> #include< ...

  7. csp-s 考前刷题记录

    洛谷 P2615 神奇的幻方 洛谷 P2678 跳石头 洛谷 P1226 [模板]快速幂||取余运算 洛谷 P2661 信息传递 LOJ P10147 石子合并 LOJ P10148 能量项链 LOJ ...

  8. 算法竞赛进阶指南0x51 线性DP

    AcWing271. 杨老师的照相排列 思路 这是一个计数的题目,如果乱考虑,肯定会毫无头绪,所以我们从1号到最后一个依次进行安排. 经过反复实验,发现两个规律 每一行的同学必须是从左向右依次连续放置 ...

  9. 【题解】AcWing 110. 防晒(普及题)

    [题解]AcWing 110. 防晒(普及题) AcWing 110. 防晒 你没有用过的全新OJ 嘿嘿水水题. 题目就是一维坐标轴上给定多个线段,给定多个点,点在线段上造成贡献,点可以重复,问最大贡 ...

随机推荐

  1. Ubuntu19.04 Help

    Ubuntu Dock 为应用程序启用最小化操作,立即生效. $ gsettings set org.gnome.shell.extensions.dash-to-dock click-action ...

  2. 利用Matlab实现PID控制仿真

    该文转自博客园: https://www.cnblogs.com/kui-sdu/p/9048534.html %PID Controller clear, clc, close all; ts=0. ...

  3. 15.Python略有小成(内置模块Ⅰ)

    Python(内置模块Ⅰ) 一.序列化模块(很重要) 序列化 : 将一种数据结构(,list,dict...),转化成一个特殊的字符串的过程 我们现在要解决的问题 : 如果有一种特殊的字符串,这个字符 ...

  4. 什么是openshift

    Openshift是一个开源的容器云平台,底层基于当前容器的事实标准编排系统Kubernetes和docker引擎,企业可以基于此平台搭建内部Paas平台,贯穿CI/CD流程,提高企业IT效率,拥抱D ...

  5. mysql_新建表:主键、外键等

    序号 命令(中文) 命令(英文呢) 解释 示例 备注 1 主键约束 primary key 不能重复,不能为空 学号 2 外键约束 foreign key 可以重复,依赖主键 学号 3 非空约束 no ...

  6. Unity项目 - 坦克大战3D TankBattle

    目录 游戏原型 项目演示 绘图资源 代码实现 技术探讨 参考来源 游戏原型 游戏玩法:在有界的战场上,玩家将驾驶坦克,代表绿色阵营,与你的队友一起击溃红蓝阵营的敌人,在这场三方大战中夺得胜利! 操作指 ...

  7. [jsp学习笔记] jsp过滤器

  8. mysql 表关系 与 修改表结构

    目录 mysql 表关系 与 修改表结构 两张表关系 分析步骤 修改表结构 mysql 表关系 与 修改表结构 两张表关系 多对一 以员工和部门举例 多个员工对应一个部门 foreign key 永远 ...

  9. Jmeter学习笔记(十四)——逻辑控制器

    一.逻辑控制器简单介绍 Jmeter中逻辑控制器(Logic Controllers)的作用域只对其子节点的sampler有效,作用是控制采样器的执行顺序.放在逻辑控制器下面的所有的采样器都会当做一个 ...

  10. python多进程并行代码

    from multiprocessing import Process import sys, os import time def timetask(string): while True: pri ...