题目链接:http://noi.openjudge.cn/ch0206/1768/

可能是数据修改了吧,O(n6)过不了了。

主要是在求一个矩阵的和时,重复计算了很多次。

矩阵首先压缩一下。在输入的时候,就计算好每一列的和于a[i][j]中。

dp:

枚举上界(第一重循环),枚举下界(第二重循环),枚举列数(第三重循环),总的时间复杂度为O(n3);

怎么得到这一列的和呢? 就是利用预处理的 a 数组。temp= a[j][k] - a[i-1][k];

然后这一列上的 dp 方程 f[k] = max(f[k-1]+temp,temp);  //选还是不选这一列;

temp2 = max(f[k]) 是这一列的最优值。循环完后,就是 ans = max(temp2) 只一个区间的最优值了。

/*
#include<iostream>
using namespace std; #define INF 0x3f3f3f3f const int Maxn = 110;
int a[Maxn][Maxn]; int main()
{
int n;
cin>>n;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
cin>>a[i][j]; int ans = -INF;
int sum = 0;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
for(int r=i; r<=n; r++)
{
for(int c=j; c<=n; c++)
{
sum = 0;
for(int k=i;k<=r;k++) {
for(int t=j;t<=c;t++) {
sum +=a[k][t];
}
}
if(sum>ans)
ans = sum;
}
}
}
} cout<<ans<<endl; return 0;
}
*/ #include <bits/stdc++.h>
using namespace std; const int INF = 0x3f3f3f3f;
const int Maxn = ;
int a[Maxn][Maxn];
int f[Maxn];
int n; int main()
{
int ans = -INF; scanf("%d",&n);
for(int i=; i<=n; i++)
for(int j=; j<=n; j++)
{
scanf("%d",&a[i][j]);
a[i][j] +=a[i-][j];
} for(int i=; i<=n; i++)
{
for(int j=i; j<=n; j++)
{
memset(f,,sizeof(f));
int temp1 = -INF;
for(int k=; k<=n; k++)
{
int temp2 = a[j][k] - a[i-][k];
f[k] = max(f[k-]+temp2,temp2);
temp1 = max(temp1,f[k]);
}
ans = max(ans,temp1);
}
} printf("%d\n",ans); return ;
}

noi 1768 最大子矩阵的更多相关文章

  1. NOI题库 1768最大子矩阵 题解

    NOI题库 1768最大子矩阵  题解     总时间限制: 1000ms 内存限制: 65536kB   描述   已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大 ...

  2. 1768:最大子矩阵(NOIP2014初赛最后一题)

    1768:最大子矩阵 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如 ...

  3. 崩 oj 1768 最大子矩阵

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

  4. NOI 动态规划题集

    noi 1996 登山 noi 8780 拦截导弹 noi 4977 怪盗基德的滑翔翼 noi 6045 开餐馆 noi 2718 移动路线 noi 2728 摘花生 noi 2985 数字组合 no ...

  5. NOI题库刷题日志 (贪心篇题解)

    这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制:  1000ms  内存限制:  65536kB 描述 在一个平面上,如果有两个点( ...

  6. #DP# ----- OpenJudge最大子矩阵

    OpenJudge 1768:最大子矩阵 总时间限制: 1000ms   内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 ...

  7. openjudge-NOI 2.6基本算法之动态规划 专题题解目录

    1.1759 最长上升子序列 2.1768 最大子矩阵 3.1775 采药 4.1808 公共子序列 5.1944 吃糖果 6.1996 登山 7.2000 最长公共子上升序列 8.2718 移动路线 ...

  8. dp专练

    dp练习. codevs 1048 石子归并 区间dp #include<cstdio> #include<algorithm> #include<cstring> ...

  9. NOI-动规题目集锦

    162:Post Office 解题思路 #include<bits/stdc++.h> using namespace std; ],f[][],mi[][],i,j; int main ...

随机推荐

  1. c#语句 for循环嵌套

    1.打印三角形. 1) 方法一.for嵌套 方法二.只用一个for 2)倒三角 3)后三角 2.求100以内质数的和. 3.一张纸厚度为0.01米,至少对折多少次才能达到珠峰的高度?(用for死循环) ...

  2. SpringMVC如何接收application/json内容编码类型的参数?

    在上代码之前,有必要先说说@ResquestBody注解的含义: 1.官方解释如下: Annotation indicating a method parameter should be bound ...

  3. Rearrange a string so that all same characters become d distance away

    Given a string and a positive integer d. Some characters may be repeated in the given string. Rearra ...

  4. LinqToXml

    简单的创建一个Xml ///创建一个Xml文档 XElement x = new XElement("qiao");//创建一个根节点 var xx = new XElement( ...

  5. Node.js 使用 soap 模块请求 WebService 服务接口

    项目开发中需要请求webservice服务,前端主要使用node.js 作为运行环境,因此可以使用soap进行请求. 使用SOAP请求webservice服务的流程如下: 1.进入项目目录,安装 so ...

  6. SQL基础巩固1

    直接开门见山------F4 1.查询 对指定的数据表或是视图进行检索查询,找出符合查询条件功能,具体包括以下SQL语法如下所示,其中[]为可选项 Select<列名> From<表 ...

  7. python 特殊的下划线

    Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx      不能用'from module import *'导入 __xxx__ 系统定义名字 __xxx    类中的私有变量名 核 ...

  8. iOS中文API之NSLayoutconstraint

    AutoLayout为开发者提供了一种不同于传统对于UI元素位置指定的布局方法.以前,不论是在IB里拖放,还是在代码中写,每个UIView都会有自己的frame属性,来定义其在当前视图中的位置和尺寸. ...

  9. 将数据文件从asm移到普通文件系统

    数据库可以关闭的场景: 1.关闭并重新mount数据库 $ sqlplus '/as sysdba' SQL> shutdown immediate; SQL> startup mount ...

  10. java权限修饰符