【题意】

已知:n,m,r,c,a[i][j]

(1 ≤ n ≤ 16, 1 ≤ m ≤ 16,1 ≤ a[i][j] ≤1000,1 ≤ r ≤ n, 1 ≤ c ≤ m)

条件:矩阵的分值定义为每一对相邻元素之差的绝对值之和

求:n*m的矩阵中找出r*c的子矩阵,使其分值最小

【构思】

对于一维的问题,就是只有一行,那么很好解决;

子矩阵,找r行,再找c列;

找r行,搜索,2^r;

然后对于列的处理,可以转化为一维的情况,发现也可以用DP;

所以时间复杂度为O(2^r*c*c)

【实现】

#include <cstdio>

#include <cstring>

#include <cstdlib>

#include <climits>

using namespace std;

const int N=17;

int n,m,r,c,p[N][N],v[N],f[N],res=INT_MAX,t[N],t1[N][N];

void init(void)

{

scanf("%d%d%d%d",&n,&m,&r,&c);

for (int i=1;i<=n;i++)

for (int j=1;j<=m;j++) scanf("%d",&p[i][j]);

}

int min(int i,int j)

{

return i<j?i:j;

}

int DP(void)

{

memset(t,0,sizeof t);

memset(t1,0,sizeof t1);

for (int i=1;i<=m;i++)

for (int j=1;j<v[0];j++) t[i]+=abs(p[v[j]][i]-p[v[j+1]][i]);

for (int i=1;i<m;i++)

for (int j=i+1;j<=m;j++)

for (int k=1;k<=v[0];k++) t1[i][j]+=abs(p[v[k]][i]-p[v[k]][j]);

for (int i=1;i<=m;i++) f[i]=t[i];

for (int i=2;i<=c;i++)

for (int j=m;j>=i;j--)

{

f[j]=INT_MAX;

for (int k=j-1;k>=i-1;k--) f[j]=min(f[j],f[k]+t1[k][j]);

f[j]+=t[j];

}

int ans=INT_MAX;

for (int i=c;i<=m;i++) ans=min(ans,f[i]);

return ans;

}

void DFS(int i,int dep)

{

if (dep==r)

{

res=min(res,DP());

return;

}

for (int j=i;j<=n-r+dep+1;j++)

{

v[++v[0]]=j;

DFS(j+1,dep+1);

v[v[0]--]=0;

}

}

void work(void)

{

DFS(1,0);

printf("%d\n",res);

}

int main(void)

{

init();

work();

return 0;

}

【回顾】

[1] 对于棋盘上的01选择问题,通常行用搜索,列用其他方法,降低时间复杂度

[2] 棋盘的问题,把二维转化为一维,这种思想可以延伸为特殊问题的普遍性,然后再把普遍性和特殊性建立一定的联系


NOIP 2014 普及组 T4 子矩阵的更多相关文章

  1. NOIP 2014 普及组 T3 螺旋矩阵

    [题意] 已知:n,r,c(n<=30000) 条件:给定n行n列的螺旋矩阵(从矩阵的左上角(1,1)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过 ...

  2. NOIP 2014 提高组 题解

    NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...

  3. NOIP 2018 普及组 解题报告

    目录 标题统计 题目链接 思路 代码 龙虎斗 题目链接: 思路 代码 摆渡车 题目链接: 思路 对称二叉树 题目链接 思路: 先来解释一下为毛现在才来发解题报告: 其实博主是参加过NOIP 2018普 ...

  4. 洛谷P1067 多项式输出 NOIP 2009 普及组 第一题

    洛谷P1067 多项式输出 NOIP 2009 普及组 第一题 题目描述 一元n次多项式可用如下的表达式表示: 输入输出格式 输入格式 输入共有 2 行 第一行 1 个整数,n,表示一元多项式的次数. ...

  5. noip 2014 提高组初赛

    noip 2014 提高组初赛 一. TCP协议属于哪一层协议( ) A. 应用层 B. 传输层 C. 网络层 D. 数据链路层 B TCP(传输控制协议) 若有变量int a; float: x, ...

  6. NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)

    题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备给小朋友们讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每 ...

  7. NOIP2015普及组T4推销员(暴力+线段树)

    题目:阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有N家住户,第i家住户到入口的距离为Si米.由于同一栋房子里 ...

  8. NOIP 2014 提高组 Day2

    期望得分:100+60+30=190 实际得分:70+60+30=160 https://www.luogu.org/problem/lists?name=&orderitem=pid& ...

  9. NOIP 2014 提高组 Day1

    期望得分:100+100+50=250 实际得分:100+100+50=250 此次NOIP  ZJ省一分数线:500,SD:345 https://www.luogu.org/problem/lis ...

随机推荐

  1. c++学习笔记2--constexpr,类型别名,auto

    constexpr:修饰常量表达式,约定修饰对象不仅为常量,而且在编译阶段就能得到值. 与const不同的是,constexpr约束的是当事人,就是说,constexpr int *a=1;这样的语句 ...

  2. linux下的文件系统

    转http://www.cnblogs.com/yyyyy5101/articles/1901842.html 谈谈个人对于文件系统的认识,其实这也体现了计算机操作系统的抽象:你不用管计算机中的文件如 ...

  3. windows api线程

    一.1.定义入口函数static void  threadFunc(void);//在TestDlg.h里面声明 void CTestDlg::threadFunc(void) //在TestDlg. ...

  4. zh-cn en-uk、zh-tw表示语言(文化)代码与国家地区对照表(最全的各国地区对照表)

    af 公用荷兰语 af-ZA 公用荷兰语 - 南非 sq 阿尔巴尼亚 sq-AL 阿尔巴尼亚 -阿尔巴尼亚 ar 阿拉伯语 ar-DZ 阿拉伯语 -阿尔及利亚 ar-BH 阿拉伯语 -巴林 ar-EG ...

  5. centos6.5 ssh安全优化,修改默认端口名,禁止root远程登录

    一.修改默认端口号 第一步: vi /etc/sysconfig/iptables 添加修改后的端口号的配置 -A INPUT -p tcp -m state --state NEW -m tcp - ...

  6. CentOS 6.5中linux grub修复

    在使用Linux的过程中,难免会出现开机提示grub >而无法启动,可能是系统中/boot/grub文件丢失等原因造成的,当出现此问题的时候只要系统分区没有格式化一般是可以修复的,下面就以虚拟 ...

  7. uTenux——重新整理底层驱动库

    重新整理底层驱动库 1. 整理chip.h 在chip.h文件中的07----13的宏定义设置位如下,这样我们就不用在工程配中定义sam3s4c这个宏了,为我们以后通用少了一件麻烦事. //#if d ...

  8. Debug不崩溃Release版本崩溃的一种原因

    今天有一个工程Debug是正常,Release崩溃,郁闷至极. 研究了一下下午,原因是一个类成员变量没有构造函数中初始化.而Debug版本正好没有问题. 所以定义类成员,一定不能忘记初始化!!

  9. Datatypes In SQLite Version 3

    http://www.sqlite.org/datatype3.html http://stackoverflow.com/questions/7337882/what-is-the-differen ...

  10. NPO与X7R、X5R、Y5V、Z5U神马的有啥区别

    主要是介质材料不同.不同介质种类由于它的主要极化类型不一样,其对电场变化的响应速度和极化率亦不一样. 在相同的体积下的容量就不同,随之带来的电容器的介质损耗.容量稳定性等也就不同.介质材料划按容量的温 ...