Mobile Service

jzoj 1327

题目大意

某公司有三个员工,现在有n个时刻,某一时刻要一个员工到一个位置(别的员工不能动),代价为ci,jc_{i,j}ci,j​,一个位置一个时刻最多有一个人,问最小代价是多少

输入样例

5 9
0 1 1 1 1
1 0 2 3 2
1 1 0 4 1
2 1 5 0 1
4 2 3 4 0
4 2 4 1 5 4 3 2 1

输出样例

5

数据范围

3⩽L⩽2003\leqslant L\leqslant 2003⩽L⩽200
1⩽N⩽10001\leqslant N\leqslant 10001⩽N⩽1000
ci,j⩽2000c_{i,j}\leqslant 2000ci,j​⩽2000

解题思路

我们设fi,x,y,zf_{i,x,y,z}fi,x,y,z​为i时刻三个员工分别位于x、y、z,然后状态转移方程显而易见了,当我们需要优化
我们可以减少一个z,因为i时刻一定有个员工在指定位置
最后我们还要滚动一波

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n, m, ans, a[1050], c[250][250], f[2][202][202];
int main()
{scanf("%d %d", &m, &n);for (int i = 1; i <= m; ++i)for (int j = 1; j <= m; ++j)scanf("%d", &c[i][j]);memset(f, 127/3, sizeof(f));f[0][2][3] = 0;a[0] = 1;for (int i = 1; i <= n; ++i){memset(f[i&1], 127/3, sizeof(f[i&1]));scanf("%d", &a[i]);for (int x = 1; x <= m; ++x)for (int y = 1; y <= m; ++y)if (a[i - 1] != x && x != y && a[i - 1] != y){if (a[i - 1] == a[i])//防止有重复的f[i&1][x][y] = min(f[i&1][x][y], f[(i + 1)&1][x][y]);else if (x == a[i])f[i&1][a[i - 1]][y] = min(f[i&1][a[i - 1]][y], f[(i + 1)&1][x][y]);else if (y == a[i])f[i&1][x][a[i - 1]] = min(f[i&1][x][a[i - 1]], f[(i + 1)&1][x][y]);else{f[i&1][x][y] = min(f[i&1][x][y], f[(i + 1)&1][x][y] + c[a[i - 1]][a[i]]); //转移f[i&1][a[i - 1]][y] = min(f[i&1][a[i - 1]][y], f[(i + 1)&1][x][y] + c[x][a[i]]);f[i&1][x][a[i - 1]] = min(f[i&1][x][a[i - 1]], f[(i + 1)&1][x][y] + c[y][a[i]]); }        }}ans = 2147483646;for (int x = 1; x <= m; ++x)for (int y = 1; y <= m; ++y)if (a[n] != x && x != y && a[n] != y)ans = min(ans, f[n&1][x][y]); printf("%d", ans);return 0;
}

【DP】Mobile Service(jzoj 1327)相关推荐

  1. 【DP】奖励卡(jzoj 3937)

    奖励卡 jzoj 3937 题目大意 现在有一场比赛,想观看的人要提交申请,现在有x个人提交后得到两个号,y个人提交后得到一个号,有n轮抽号,每一轮抽一个号(概率相等),这个号的所有者不参与下一轮抽号 ...

  2. 【DP】翻硬币(jzoj 3921)

    翻硬币 jzoj 3921 题目大意: 给你一个长度为nnn的当前01串和目标01串,现在你要做mmm此操作,每次操作你要使kkk个不同的位取反,现在问你有多少种方法可以使当前01串变为目标01串 输 ...

  3. 【DP】数字游戏(jzoj 2131)

    数字游戏 jzoj 2131 题目大意: 有n个数,每个数有相应的aia_iai​和bib_ibi​,当选了一个数后结果加上aia_iai​,其他数分别减去他们自己的aja_jaj​,现在让你选m个数 ...

  4. 【DP】合唱队形(jzoj 1122)

    合唱队形 jzoj 1122 题目大意: 有n个人,按一定的顺序站成一排,最少减去多少个人可以使队列以一个人为中心,两边分别递减 输入样例 8 186 186 150 200 160 130 197 ...

  5. 【数学】异或(jzoj 2298)

    异或 jzoj 2298 题目大意: 定义nbnbnb数对a,ba,ba,b为gcd(a,b)=abgcd(a,b)=a^bgcd(a,b)=ab的数对,问不大于nnn的nbnbnb数对有多少对 输入 ...

  6. 【拓扑排序】【DP】旅行计划(luogu 1137)

    旅行计划 luogu 1137 题目大意: 有一堆点,之间连接着一些边(有向),保证无环,现在要求出从任意地方出发到所有点的最长路(出发点不一定相同) 原题: 题目描述 小明要去一个国家旅游.这个国家 ...

  7. 【结论】单元格(jzoj 1509)

    单元格 题目大意: 在一个R×C的矩形中选三个点,使他们行列各不同,定义"费用"为,这三个点之间的行列的差值的和(1,2和3,4费用是差值是(3-1)+(4-2)=2+2=4),问 ...

  8. 【dfs】简单游戏(jzoj 2121)

    简单游戏 题目大意 原本有n个数字,第1,2个相加,第2,3个相加--第n-1,n个相加,由此得出一个长度为n-1的新序列,然后不停重复,最后得出一个t,现在给出一开始的n和t求符合的序列(字典序最小 ...

  9. 【数位DP】好数(jzoj 1521)

    好数 jzoj 1521 题目大意: 定义好数为转换为二进制后,有至少三个连续的位相同的数,现在要求一个范围内的好数个数 样例输入 0 16 样例输出 5 数据范围限制 0 <= Low < ...

最新文章

  1. 使用shouldComponentUpdate进行性能优化
  2. Leaflet中使用Leaflet.fullscreen插件实现全屏效果
  3. broken pipe怎么解决 数据太大_振动筛噪音太大、扬尘问题严重,不够环保怎么办?看看这篇文章,帮您解决困扰...
  4. 苹果自带相册打马赛克_哥们被绿?iOS 13惊现漏洞,马赛克去除
  5. 转:OGRE场景管理器介绍
  6. clustalw序列比对_序列比对,科研必备的几款软件
  7. Delphi基础教程图文版之数组
  8. 关于RTSP在HTML5前端播放问题解决办法
  9. 根据身份证号判断所属省份、生日及性别
  10. adb push php,ADB指令合集-ADB指令如何执行刷Recovery,重启进Recovery,双Wipe和刷ROM手机刷机...
  11. 活动回顾 | Mini XMan线上快闪活动圆满结束!
  12. bzoj 2101: [Usaco2010 Dec]Treasure Chest 藏宝箱【区间dp】
  13. Ouroboros Snake POJ - 1392(数位哈密顿回路)
  14. Arduino - 改造楼道门禁,使用密码开门
  15. 计算机毕业设计之android的二手车交易系统app(源码+系统+mysql数据库+Lw文档)
  16. 关于TLC2543不常见问题
  17. c++ Primer课后练习9-31
  18. 前端工程化精讲第七课 低代码工具:如何用更少的代码实现更灵活的需求?
  19. Mybatis——自定义映射ResultMap
  20. Oracle 11g存在密码过期问题

热门文章

  1. 上海市二级c语言软件环境,上海市计算机二级C语言复习资料 word整理版.doc
  2. leetcode707:设计链表(增删差)
  3. 7-7 六度空间 (30 分)(BFS遍历详解)(DFS最后一个点过不去)
  4. 回溯的问题合集(Leetcode题解-Python语言)
  5. 815 计算机专业基础综合,2018年华东理工大学信息科学与工程学院815计算机专业基础综合之计算机操作系统考研基础五套测试题...
  6. 利用真值表法求取主析取范式以及主合取范式的实现(C++)
  7. 洛谷 P1958 上学路线-dfs
  8. 数据结构与算法--字符串的排列组合问题
  9. python结束线程_2018-01-02 如何优雅地终止python线程
  10. 7-10 逆波兰表达式求值 (20 分)(c语言)(数据结构)