noi 1768 最大子矩阵
题目链接: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 最大子矩阵的更多相关文章
- NOI题库 1768最大子矩阵 题解
NOI题库 1768最大子矩阵 题解 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大 ...
- 1768:最大子矩阵(NOIP2014初赛最后一题)
1768:最大子矩阵 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如 ...
- 崩 oj 1768 最大子矩阵
描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵.比如,如下4 * 4的矩阵0 -2 -7 0 9 2 -6 2 -4 1 - ...
- NOI 动态规划题集
noi 1996 登山 noi 8780 拦截导弹 noi 4977 怪盗基德的滑翔翼 noi 6045 开餐馆 noi 2718 移动路线 noi 2728 摘花生 noi 2985 数字组合 no ...
- NOI题库刷题日志 (贪心篇题解)
这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个平面上,如果有两个点( ...
- #DP# ----- OpenJudge最大子矩阵
OpenJudge 1768:最大子矩阵 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 ...
- openjudge-NOI 2.6基本算法之动态规划 专题题解目录
1.1759 最长上升子序列 2.1768 最大子矩阵 3.1775 采药 4.1808 公共子序列 5.1944 吃糖果 6.1996 登山 7.2000 最长公共子上升序列 8.2718 移动路线 ...
- dp专练
dp练习. codevs 1048 石子归并 区间dp #include<cstdio> #include<algorithm> #include<cstring> ...
- NOI-动规题目集锦
162:Post Office 解题思路 #include<bits/stdc++.h> using namespace std; ],f[][],mi[][],i,j; int main ...
随机推荐
- Web安全学习笔记之一
浏览器基本策略:同源策略 同源策略规定:不同域的客户端脚本在没有明确授权的情况下,不能读写对方的资源. 同域与不同域:如http://www.text.com与https://www.text.com ...
- IntelliJ 有的时候移动滚动条后会自动回到光标所在位置的解决方法
关闭有道词典的取词.划词功能.
- wpf 属性变更通知接口 INotifyPropertyChanged
在wpf中将控件绑定到对象的属性时, 当对象的属性发生改变时必须通知控件作出相应的改变, 所以此对象需要实现 INotifyPropertyChanged 接口 例: //实现属性变更通知接口 INo ...
- 学习mysql
一 概述 1.什么是数据库 数据库就是数据的仓库. mysql是对数据库进行存储和指令操作的软件.这类软件成为数据管理系统Database Management System. 2.mysql的安装和 ...
- asp.net如何在前台利用jquery Ajax调用后台方法
一 :最近因为帮同事开发项目使用到了asp.net,而我又想实现Ajax异步请求....从网上查询了一下资料之后,原来在asp.net中利用Ajax调用后台方法同样很简单,为了便于自己以后查看,特将此 ...
- Unit01-OOP-对象和类(上)
Unit01-OOP-对象和类(上) 1.什么是类?什么是对象? 1)现实生活是由很多很多对象组成的 基于对象抽出了类 2)对象:真实存在的单个的个体 类:类型.类别,代表一类个体 ...
- GitLab + Jenkins + Docker + Kubernetes。
目前方案是GitLab + Jenkins + Docker + Kubernetes. 方案的工作流程如下:首先,开发人员提交代码代码提交:随后,GitLab 会自动触发Jenkins job,Je ...
- MySQL导入.sql文件及常用命令
在MySQL Qurey Brower中直接导入*.sql脚本,是不能一次执行多条sql命令的,在mysql中执行sql文件的命令: mysql> source d:/myprogram/d ...
- cocos2dx 3.x(实现帧动画(人物动画,跑马灯效果)的几种方法)
//创建一个跑酷的精灵 auto sprite = Sprite::create("1.png"); //设置精灵的坐标 sprite->setPosition(Ve ...
- tesseract ocr文字识别Android实例程序和训练工具全部源代码
tesseract ocr是一个开源的文字识别引擎,Android系统中也可以使用.可以识别50多种语言,通过自己训练识别库的方式,可以大大提高识别的准确率. 为了节省大家的学习时间,现将自己近期的学 ...