CF1102F Elongated Matrix
题目地址:CF1102F Elongated Matrix
没想到Div.3里还有这么好的题
其实就是求Hamilton路径
预处理 \(d\) 数组:
\(d1_{i,j}\) 表示第 \(i,j\) 行相邻产生的最小值
\(d2_{i,j}\) 表示第 \(i,j\) 行分别为最后一行和第一行时产生的最小值
将每一行当成一个点,任意两点 \(i,j\) 间连一条边权为 \(d1_{i,j}\) 的边
在图中求一条经过边权中最小值最小的Hamilton路径
设 \(f_{i,j}=min(s_{i,j},d2_{j,i})\)
所有 \(f\) 的最小值即为 \(ans\)
求Hamilton路径用状压dp
总时间复杂度为 \(O(n^2m+2^nn^3)\)
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 16, M = 10000, INF = 0x3f3f3f3f;
int n, m, a[N][M], d1[N][N], d2[N][N], f[N][N];
int s[1<<N][N], ans;
void Hamilton(int x) {
memset(s, 0, sizeof(s));
s[1<<x][x] = INF;
for (int i = 1; i < (1 << n); i++)
for (int j = 0; j < n; j++)
if ((i >> j) & 1)
for (int k = 0; k < n; k++)
if (((i ^ (1 << j)) >> k) & 1)
s[i][j] = max(s[i][j], min(s[i^(1<<j)][k], d1[k][j]));
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
scanf("%d", &a[i][j]);
memset(d1, 0x3f, sizeof(d1));
memset(d2, 0x3f, sizeof(d2));
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) {
for (int k = 0; k < m; k++)
d1[i][j] = min(d1[i][j], abs(a[i][k] - a[j][k]));
for (int k = 1; k < m; k++)
d2[i][j] = min(d2[i][j], abs(a[i][k-1] - a[j][k]));
}
for (int i = 0; i < n; i++) {
Hamilton(i);
for (int j = 0; j < n; j++)
ans = max(ans, min(s[(1<<n)-1][j], d2[j][i]));
}
cout << ans << endl;
return 0;
}
CF1102F Elongated Matrix的更多相关文章
- cf1102F. Elongated Matrix(状压dp)
题意 题目链接 Sol \(n \leqslant 16\)可以想到状压 我们可以预处理出任意两行之间每列的最小值以及相邻两列的最小值 然后枚举一个起点,\(f[sta][i]\)表示走过了\(sta ...
- Codeforces 1102F Elongated Matrix 状压dp
Elongated Matrix 预处理一下两两之间的最小值, 然后直接dp. #include<bits/stdc++.h> #define LL long long #define f ...
- Codeforces Round #531 (Div. 3) F. Elongated Matrix(状压DP)
F. Elongated Matrix 题目链接:https://codeforces.com/contest/1102/problem/F 题意: 给出一个n*m的矩阵,现在可以随意交换任意的两行, ...
- Codeforces1102F Elongated Matrix 【状压DP】
题目分析: 这题瞎搞一个哈密尔顿路,对于起点不同的分开跑就可以过了. $O(n^3*2^n)$ #include<bits/stdc++.h> using namespace std; ; ...
- angular2系列教程(十一)路由嵌套、路由生命周期、matrix URL notation
今天我们要讲的是ng2的路由的第二部分,包括路由嵌套.路由生命周期等知识点. 例子 例子仍然是上节课的例子:
- Pramp mock interview (4th practice): Matrix Spiral Print
March 16, 2016 Problem statement:Given a 2D array (matrix) named M, print all items of M in a spiral ...
- Atitit Data Matrix dm码的原理与特点
Atitit Data Matrix dm码的原理与特点 Datamatrix原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于 ...
- Android笔记——Matrix
转自:http://www.cnblogs.com/qiengo/archive/2012/06/30/2570874.html#translate Matrix的数学原理 在Android中,如果你 ...
- 通过Matrix进行二维图形仿射变换
Affine Transformation是一种二维坐标到二维坐标之间的线性变换,保持二维图形的"平直性"和"平行性".仿射变换可以通过一系列的原子变换的复合来 ...
随机推荐
- c3p0配置Spring
jdbc.properties jdbcUrl=jdbc:mysql://localhost:3306/myoa?useUnicode=true&characterEncoding=utf-8 ...
- eclipse新建maven项目默认jre为1.5的问题
在maven的settings.xml中添加如下内容解决 <profiles> <profile> <id>jdk-1.8</id> <activ ...
- SpringMVC简单项目配置
一.首先,SpringMVC框架使用分层开发,分层是为了实现“高内聚,低耦合”.采用“分而治之”的思想,把问题划分开来各个解决,易于控制,延展和分配资源,最重要的是有利于后期项目维护.MVC是指Mod ...
- slider插件制作轮播图
html代码: <div id="banner_tabs" class="flexslider"> <ul class="slide ...
- layui(八)——轮播图常见用法总结
carousel 是 layui 2.0 版本中新增的全新模块,主要适用于跑马灯/轮播等交互场景.它可以满足任何类型内容的轮播式切换操作,更可以胜任 FullPage (全屏上下轮播)的需求,简洁而不 ...
- centos nginx gerrit
gerrit官方地址:https://www.gerritcodereview.com/ 需先安装依赖 jdk mysql 并手动创建数据库 下载好war包后,初始化操作 java -jar ger ...
- Leetcode 136 Single Number 仅出现一次的数字
原题地址https://leetcode.com/problems/single-number/ 题目描述Given an array of integers, every element appea ...
- mysql语句之约束语句
约束语句: not null 非空 default 默认约束语句 unique 唯一约束语句 primary 主键 = 唯一 + 非空 auto_increment 自动增长 foreign key( ...
- JAVA线程池ScheduledExecutorService周期性地执行任务 与单个Thread周期性执行任务的异常处理
本文记录: 1,使用ScheduledExecutorService的 scheduleAtFixedRate 方法执行周期性任务的过程,讨论了在任务周期执行过程中出现了异常,会导致周期任务失败. 2 ...
- 微信接口 output {"errMsg":"translateVoice:fail, the permission value is offline verifying"}
jsApiList : [ 'checkJsApi', 'startRecord', 'stopRecord','translateVoice','scanQRCode', 'openCard' ]增 ...