题目链接

题意:
给出一个n * m矩阵,可以交换任意的两行,不能交换列,得到一个序列a[0][0], a[1][0], … a[0][1], a[1][1], …a[0][2], a[1][2], …以此类推,以Si代表这个序列的第i个元素,令k = min|Si - Si+1|,要求最终得到的k最大。

思路:
首先呢,看到题目中给的n才16,就该考虑往状态压缩方面去想一想了,那么接下来思考,我们的状态表示的是什么?很显然,表示的是某一行的选(对应二进制位为1)或者说不选(这不是废话吗。。。也就只有n能用二进制来枚举了,其他的数都太大了)。OK,下来我们考虑怎么进行状态的转移,设dp[status][pos]代表在状态status时,以第pos个数结尾的情况最大的k。那么状态转移方程就是:
dp[status][pos] = max(dp[status][pos], min(dp[status0][mid], dif[mid][pos])
来详细解释一下这个方程,status0代表上一个,算是一个中转状态(不包含pos,也就是第pos个还没有选),mid代表一个中转点,以此来推出当前的dp[status][pos]。而dif数组则代表第mid行和第pos行同一列的差值,这个就需要预处理了。

整个代码的思路就是:
1.枚举开始的行
2.初始化,计算dp数组
3.枚举结束的行

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <map>
#include <algorithm>using namespace std;const int maxn = 1e4 + 100;int n, m;
int a[20][maxn], dif[20][20], dif_next[20][20];
int dp[7 * maxn][20];int main()
{//freopen("in.txt", "r", stdin);cin >> n >> m;for(int i = 0; i < n; ++ i) {for(int j = 0; j < m; ++ j) {scanf("%d", &a[i][j]);}}for(int i = 0; i < n; ++ i) {for(int j = i + 1; j < n; ++ j) {int mins = 0x3f3f3f3f;for(int u = 0; u < m; ++ u) {mins = min(mins, abs(a[i][u] - a[j][u]));}dif[i][j] = dif[j][i] = mins;}   }int ans = 0;for(int st = 0; st < n; ++ st)  //枚举起点{for(int i = 0; i < (1 << n); ++ i)     //初始化fill_n(dp[i], n, 0);dp[1 << st][st] = 0x3f3f3f3f;for(int status = 1; status < (1 << n); ++ status)   //枚举状态{for(int mid = 0; mid < n; ++ mid){if(dp[status][mid])     //枚举中转点{for(int pos = 0; pos < n; ++ pos)   //枚举要求解的点{if(!(status & (1 << pos)))   //这个点不在之前的状态中才能求解{dp[status|(1<<pos)][pos] = max(dp[status|(1<<pos)][pos], min(dp[status][mid], dif[mid][pos]));}}}}}for(int en = 0; en < n; ++ en){int k = dp[(1 << n) - 1][en];for(int i = 0; i + 1 < m; ++ i){k = min(k, abs(a[en][i] - a[st][i + 1]));}ans = max(ans, k);}}cout << ans << endl;return 0;
}

Codeforces Round #531 (Div. 3) F. Elongated Matrix (状态压缩dp)相关推荐

  1. Codeforces Round #595 (Div. 3) F. Maximum Weight Subset 树形dp

    传送门 文章目录 题意: 思路: 题意: n≤200n\le200n≤200 思路: 明显的树形dpdpdp,所以考虑一下dpdpdp状态. 这个题状态挺神的..可能是因为我太菜了,看了半天才看懂. ...

  2. Codeforces Round #521 (Div. 3): F. Pictures with Kittens(DP+单调队列)

    题意: 你有n幅画,第i幅画的好看程度为ai,再给你两个数字k,x,表示你要从中选出刚好x幅画,并且相邻两幅画的距离不能≥k,好看程度之和最大能多少,选不出来输出-1,F1数据范围<200,F2 ...

  3. Codeforces Round #642 (Div. 3) F. Decreasing Heights 题解(dp+思维)

    题目链接 题目思路 emmm这个题目如果找到一个性质就很好了,就是如果确定a[1][1]的值,那么就一下确定了,而且a[1][1]的值只有n*m个.因为如果最终的合法路径每个格子都被操作了至少一次,那 ...

  4. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

  5. Codeforces Round #644 (Div. 3) F.Spy-string

    Codeforces Round #644 (Div. 3) F.Spy-string 题目链接 You are given n strings a1,a2,-,an: all of them hav ...

  6. Codeforces Round #849 (Div. 4) F. Range Update Point Query

    Codeforces Round #849 (Div. 4) F. Range Update Point Query 题目大意: 给一串数字,有两个操作: 操作1:将 l − r l-r l−r 的数 ...

  7. Codeforces Round #538 (Div. 2) F. Please, another Queries on Array? 线段树 + 欧拉函数

    传送门 文章目录 题意: 思路: 题意: 给你一个序列aaa,你需要实现两种操作: (1)(1)(1) 将[l,r][l,r][l,r]的aia_iai​都乘rrr. (2)(2)(2) 求ϕ(∏i= ...

  8. Codeforces Round #742 (Div. 2) F. One-Four Overload 构造 + 二分图染色

    传送门 文章目录 题意: 思路: 题意: 给你一个n∗mn*mn∗m的矩形,包含...和XXX,你有两种颜色,你需要给...染色使得每个XXX上下左右相邻的...其两种颜色个数相同,输出一种合法方案. ...

  9. Codeforces Round #740 (Div. 2) F. Top-Notch Insertions 线段树 / 平衡树 + 组合数学

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑最终的序列是什么鸭子的,首先序列肯定单调不降,也就是a1≤a2≤a3≤...≤ana_1\le a_2\le a_3\le ...\le a_na ...

  10. Codeforces Round #585 (Div. 2) F. Radio Stations 2-sat + 神仙建模

    传送门 文章目录 题意: 思路: 题意: 你现在有ppp种电台,有nnn对关系(x,y)(x,y)(x,y)代表xxx电台或yyy电台中至少有一个,mmm对关系(x,y)(x,y)(x,y)代表xxx ...

最新文章

  1. 25 岁“天才少年”曹原再发一篇 Nature!9 个月的第三篇 Nature!
  2. php dir类,PHP基于dir类实现目录遍历删除
  3. Confluence 6 管理协同编辑
  4. python基础单词-学Python必背的初级单词,快来看看学吧
  5. int*类型和int类型_mysql8.0.19中在navicat客户端中int、bigint等类型设置长度保存后为0...
  6. UE4 获得player id
  7. python代替shell脚本_python的简洁是shell无法代替的
  8. Magento教程 12:Magento快速上传大量商品的方法
  9. android sd卡相关avc,Android 5.x 权限问题解决方法
  10. MySQL使用什么关键字添加唯一约束_mysql怎么添加唯一约束?
  11. 全局 快捷键_表格快捷键
  12. 电阻的种类以及选型要点
  13. android系统美化app,手机主题App哪个好用?安卓手机主题App推荐
  14. 最近流行的暴寒经典语句
  15. Django框架目录结构
  16. vue使用axios配置多域名
  17. 做短视频怎么赚钱,盈利模式包括哪些模式,如何做短视频自媒体赚钱
  18. 软件测试常考面试题-软件测试面试宝典
  19. java中io流,Reader和Writer,InputStream和OutputStream,转换流 InputStreamReader 和 OutputStreamWriter
  20. Nodejs (一)

热门文章

  1. 判断new数据初始化_拔剑-浆糊的传说_新浪博客
  2. Objective-C——initialize方法调用原理分析
  3. [embeded] Relocations in generic ELF (EM: 183)
  4. php smarty extends,php封装的smarty类完整实例
  5. mysql导入excel文件_将Excel数据导入MySQL
  6. 5855. 找出数组中的第 K 大整数
  7. [安洵杯 2019]easy_web
  8. cv2.imshow无法正常显示图片,而是一闪而过解决办法
  9. 【雅思大作文考官范文】——第十六篇:climate change essay
  10. android 11.0 去掉音量键电源键组合键的屏幕截图功能