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是一种二维坐标到二维坐标之间的线性变换,保持二维图形的"平直性"和"平行性".仿射变换可以通过一系列的原子变换的复合来 ...
随机推荐
- Centos7安装Mysql5.7方法总结 - 实操手册
Centos7.x版本下针对Mysql的安装和使用多少跟之前的Centos6之前版本有所不同的,废话就不多赘述了,下面介绍下在centos7.x环境里安装mysql5.7的几种方法:一.yum方式安装 ...
- stock1114
# encoding: utf-8 import requests import logging import logging.config import random import os impor ...
- jmeter计算身份证校验位
idcard_no='111111198101017000' ; idcard_no_array = idcard_no.substring(0,17).toCharArray(); int[] c ...
- passat QA / error code 20190210
s 帕萨特B5 技术资料下载 https://pan.baidu.com/s/1KXYly7eGDUSI5QiLcz8fiQ 提取码: 1i7u 星期日,10,二月,2019,17:16:16:317 ...
- Python的基础详情
Python的基础信息 Python是一种动态解释性高级语言 Python即可面向对象,也可以面向过程 解释行语言 无需编译 程序以'行'为单位进行执行 执行速度慢 开发效率快 可跨平台 编译型语言 ...
- oracle数据泵导入导出命令
1.在PL/SQL的界面,找到Directories文件夹,找到目录文件的路径 2.通过SSH进入服务器 找到相应的路径 cd /u01/oracle/dpdir 输入指令 df -h 查看资源使 ...
- JAVA-Proxy 代理
jdk静态代理 interface Dao { void save(); } class DaoImpl implements Dao { @Override public void save() { ...
- Linux学习笔记:【001】Linux内核分析
Linux内核 Linux内核是Linux系统构成中最核心的一个部分,是由5个子系统组成. 进程调度: 进程调度(SCHED)控制进程对CPU的访问.当需要选择下一个进程运行时,由调度程序选择最值得运 ...
- vue中axios 配置请求拦截功能 及请求方式如何封装
main.js 中: import axios from '................/axios' axios.js 中: //axios.js import Vue from 'vue' i ...
- Carbon - 在线生成精美的代码片段图片(含插件)
Carbon 是一个可以帮助你创建和分享源代码美丽图像的小工具.开始在文本区域输入或拖入代码文件以开始使用.你还在等什么? 让你的设计实力给阅读者留下深刻印象. 在线演示 免费下载 您可能感 ...