这题如果按暴力做只有一半分,最大时间复杂度为O(C(16,8)*C(16,8)); 很容易算出超时;

我们可以发现如果直接dp会很难想,但是知道选哪几行去dp就很好写状态转移方程:

dp[i][j]=min(dp[i][j],dp[k][j-1]+a[i]+b[k][i]);

其中dp[i][j]表示 前i列里选j列的子矩阵最大分值

a[i]表示 第i列选到的行的总差值

b[k][i]表示选到的每一行第k列和第i列之间的差值

我们只要枚举 行 然后dp一次,取最小值即可 这样最大时间复杂度就成了O(C(8,16)*n3);

最后附上我弱弱的pascal代码:

 1 var
 2   i,j,k,n,m,n1,m1,ans:longint;
 3   dp,a,f:array[0..16,0..16] of longint;
 4   hc:array[0..16,1..16,1..16] of longint;
 5   b,lc:array[0..17] of longint;
 6 function min(a,b:longint):longint;
 7  begin
 8   if a>b then min:=b
 9          else min:=a;
10  end;
11 procedure ddp;
12  var
13   i,j,k,max:longint;
14  begin
15   fillchar(f,sizeof(f),0);
16   fillchar(lc,sizeof(lc),0);
17   fillchar(dp,sizeof(dp),0);
18   for i:=1 to m do
19    for j:=1 to n1-1 do
20     lc[i]:=lc[i]+abs(a[b[j+1],i]-a[b[j],i]);
21   for i:=1 to m do
22    for j:=i+1 to m do
23     for k:=1 to n1 do
24      f[i,j]:=f[i,j]+hc[b[k],i,j];
25   for i:=1 to m do
26    dp[i,1]:=lc[i];
27   for i:=2 to m do
28    for j:=2 to m1 do
29     if i>=j then
30               begin
31                dp[i,j]:=maxlongint;
32                for k:=j-1 to i-1 do
33                 dp[i,j]:=min(dp[i,j],dp[k,j-1]+lc[i]+f[k,i]);
34               end;
35   for i:=m1 to m do
36    if dp[i,m1]<ans then ans:=dp[i,m1];
37  end;
38 procedure jw(ii:longint);
39  begin
40   inc(b[ii]);
41   if ii>=0 then
42    if b[ii]>(n-n1+ii) then
43                          begin
44                           jw(ii-1);
45                           b[ii]:=b[ii-1]+1;
46                          end;
47  end;
48 begin
49   read(n,m,n1,m1);
50   for i:=1 to n do
51    for j:=1 to m do
52     begin
53      read(a[i,j]);
54      for k:=1 to j-1 do
55       hc[i,k,j]:=abs(a[i,j]-a[i,k]);
56     end;
57   for i:=1 to n1 do
58    b[i]:=i;
59   ans:=100000000;
60   while b[0]=0 do
61    begin
62     ddp;
63     jw(n1);
64    end;
65   write(ans);
66 end.

转载于:https://www.cnblogs.com/WQHui/p/5869500.html

【NOIP2014】子矩阵相关推荐

  1. 【vijos P1914】【codevs 3904】[NOIP2014 普及组T4]子矩阵(dfs+状压dp)

    P1914子矩阵 Accepted 标签:NOIP普及组2014[显示标签] 描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与 列的相对顺序)被称为原矩阵 ...

  2. 子矩阵(NOIP2014 普及组第四题)

    描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与 列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第 2.4 行和第 2.4.5 列交叉位置 ...

  3. 【NOIP2014普及组】子矩阵

    题目 题目描述 给出如下定义:      1. 子矩阵: 从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序) 被称为原矩阵的一个子矩阵.       例如,下面左图中选取第 ...

  4. 题解:子矩阵(NOIP2014普及组T4)

    又是dp 暴力枚举会T 考虑先固定一个变量,比如先枚举行 然后预处理每行之间的绝对值,每列之间的绝对值 然后dp进行转移 注意记录选择的行数 转移记得加上新选的列的行之间的绝对值,即w[i], 1 # ...

  5. 求一个矩阵的最大子矩阵

    #include <iostream> #include <string> #include <assert.h> #include <malloc.h> ...

  6. 最大子矩阵(降维处理)

    题目描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的矩阵 0 -2 -7 0 9 2 -6 2 -4 1 - ...

  7. 带限制条件的最大子矩阵 - 牛客

    链接:https://www.nowcoder.com/acm/contest/131/B 来源:牛客网 题目描述 矩阵 M 包含 R 行 C 列,第 i 行第 j 列的值为 Mi,j. 请寻找一个子 ...

  8. 软件工程——求二维数组所有子矩阵的和的最大值

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为 ...

  9. 子矩阵(暴搜(全排列)+DP)

    子矩阵(暴搜(全排列)+DP) 一.题目 子矩阵 时间限制: 1 Sec  内存限制: 128 MB 提交: 1  解决: 1 [提交][状态][讨论版] 题目描述 给出如下定义: 1. 子矩阵:从一 ...

最新文章

  1. 一位铁粉的分享:阿里面试归来总结面经,已成功斩获P6 offer...
  2. SpringCloud Zuul(八)之ERROR Filter
  3. libreoffice_利用Excel或LibreOffice的业务输入进行单元测试约束
  4. anaconda激活python_Anaconda使用conda activate激活环境出错(待完全解决)2018-06-09
  5. D3 scaleThreshold
  6. Win11未安装Defender怎么办?解决Win11未安装Defender的方法
  7. 第一章节 ASP.NET Web应用程序基础(二)
  8. pythonweb项目源码下载_最新Python WEB开发在线教育项目之谷粒教育 软件源码齐全...
  9. 开源容器云openshift pdf_OpenShift和Kubernetes的10个最重要的区别
  10. 通过JAVA获取优酷、土豆、酷6、6间房、56视频
  11. 计算机自动获取ip地址的协议,自动获取ip地址_计算机是如何自动获取的IP地址的...
  12. MATLAB深度学习代码详细分析(一)__nnff.m
  13. spring security——学习笔记(day05)-实现自定义 AuthenticationProvider身份认证-手机号码认证登录
  14. android现状及发展趋势,2021年Android手机现状分析
  15. 关于结构化、半结构化、非结构化数据的理解
  16. HTML5期末大作业:动漫网站设计——迪斯尼公主(6个页面) HTML+CSS+JavaScript 动漫网页HTML代码 学生网页课程设计期末作业下载 动漫大学生网页设计制作成
  17. Flutter 笔记 | Flutter 布局组件
  18. MATLAB,关于SOLVE函数报错的问题
  19. Type 3字体的解决办法
  20. [附源码]java毕业设计毕业生离校管理系统

热门文章

  1. NOI2006 最大获利
  2. 姜黄的毒副作用调研汇总(调研手稿二)
  3. 2020Alibaba数学竞赛决赛试题
  4. 修改octave的editor的背景颜色
  5. pyspark读取json文件中的内容
  6. 机器学习(三十七)——Integrating Learning and Planning(3)
  7. 深度学习(十五)——SPPNet, Fast R-CNN
  8. python3类与对象汽车,Python3 类与对象
  9. 电脑怎么打印文件步骤_电脑中毒后怎么办 电脑中毒后解决方法【详细步骤】...
  10. c语言extern关键字详解