1084: [SCOI2005]最大子矩阵

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1325  Solved: 670
[Submit][Status]

Description

这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。注意:选出的k个子矩阵不能相互重叠。

Input

第一行为n,m,k(1≤n≤100,1≤m≤2,1≤k≤10),接下来n行描述矩阵每行中的每个元素的分值(每个元素的分值的绝对值不超过32767)。

Output

只有一行为k个子矩阵分值之和最大为多少。

Sample Input

3 2 2
1 -3
2 3
-2 3

Sample Output

9

HINT

 

Source

 题解:看了半天不知道怎么办才好,直到发现M<=2(HansBug:呵呵你早说就俩列得了呗呵呵哒)假如这样的话那么直接根据此行俩数的不同情况讨论下不就得啦。。。情况繁一点
 program bzoj1084;

 {$mode objfpc}{$H+}

 uses
Classes, SysUtils
{ you can add units after this }; var
i,j,k,l,m,n,tot,ii,jj:longint;
b:array [..,..] of longint;
a:array [..,..,..] of longint;
begin
readln(n,m,k);
for i:= to n do for j:= to m do read(b[i,j]);
if m= then
begin
for i:= to k do
begin
a[,,i]:=-maxlongint div ;
a[,,i]:=-maxlongint div ;
end;
a[,,]:=;
for i:= to n do
for j:= to k do
begin
if a[i-,,j]>a[i-,,j] then a[i,,j]:=a[i-,,j] else a[i,,j]:=a[i-,,j];
if j= then
a[i,,j]:=-maxlongint div
else
begin
a[i,,j]:=a[i-,,j]+b[i,];
if a[i,,j]<a[i-,,j-]+b[i,] then a[i,,j]:=a[i-,,j-]+b[i,];
if (j>) and (a[i,,j]<a[i-,,j-]+b[i,]) then a[i,,j]:=a[i-,,j-]+b[i,];
end;
end;
if a[n,,k]>a[n,,k] then writeln(a[n,,k]) else writeln(a[n,,k]);
halt;
end;
for i:= to k do for j:= to do a[,j,i]:=-maxlongint div ;
a[,,]:=;
for i:= to n do
for j:= to k do
begin
for ii:= to do
case ii of
:begin
a[i,,j]:=a[i-,,j];
for jj:= to do if a[i,,j]<a[i-,jj,j] then a[i,,j]:=a[i-,jj,j];
end;
..:begin
a[i,ii,j]:=a[i-,ii,j]+b[i,ii];
for jj:= to do if (j>) and (a[i,ii,j]<a[i-,jj,j-]+b[i,ii]) then a[i,ii,j]:=a[i-,jj,j-]+b[i,ii];
if a[i,ii,j]<a[i-,,j]+b[i,ii] then a[i,ii,j]:=a[i-,,j]+b[i,ii];
end;
:begin
a[i,ii,j]:=a[i-,ii,j]+b[i,]+b[i,];
for jj:= to do if (j>=) and (a[i,ii,j]<a[i-,jj,j-]+b[i,]+b[i,]) then a[i,ii,j]:=a[i-,jj,j-]+b[i,]+b[i,];
for jj:= to do if (j>=) and (a[i,ii,j]<a[i-,jj,j-]+b[i,]+b[i,]) then a[i,ii,j]:=a[i-,jj,j-]+b[i,]+b[i,];
end;
:begin
a[i,ii,j]:=a[i-,ii,j]+b[i,]+b[i,];
for jj:= to do if (j>=) and (a[i,ii,j]<a[i-,jj,j-]+b[i,]+b[i,]) then a[i,ii,j]:=a[i-,jj,j-]+b[i,]+b[i,];
end;
end;
end;
tot:=-maxlongint div ;
for i:= to do if tot<a[n,i,k] then tot:=a[n,i,k];
writeln(tot);
end.

1084: [SCOI2005]最大子矩阵的更多相关文章

  1. BZOJ 1084: [SCOI2005]最大子矩阵 DP

    1084: [SCOI2005]最大子矩阵 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n* ...

  2. 【BZOJ 1084】 1084: [SCOI2005]最大子矩阵 (DP)

    1084: [SCOI2005]最大子矩阵 Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第 ...

  3. BZOJ(6) 1084: [SCOI2005]最大子矩阵

    1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3566  Solved: 1785[Submit][Sta ...

  4. 【BZOJ】1084: [SCOI2005]最大子矩阵(DP)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1084 有一个1A--- 本题没看懂,,不会啊囧..感觉完全设不了状态..看了题解,囧,m<=2 ...

  5. [BZOJ 1084] [SCOI2005] 最大子矩阵 【DP】

    题目链接:BZOJ - 1084 题目分析 我看的是神犇BLADEVIL的题解. 1)对于 m = 1 的情况, 首先可能不取 Map[i][1],先 f[i][k] = f[i - 1][k];   ...

  6. BZOJ 1084 [SCOI2005]最大子矩阵 - 动态规划

    传送门 题目大意: 从矩阵中取出k个互不重叠的子矩阵,求最大的和. 题目分析: 对于m=1,直接最大m子段和. 对于m=2: \(dp[i][j][k]\)表示扫描到第一列i和第2列j时选取了k个矩阵 ...

  7. BZOJ: 1084: [SCOI2005]最大子矩阵

    NICE 的DP 题,明白了题解真是不错. Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1228  Solved: 622[Submit][Stat ...

  8. 1084: [SCOI2005]最大子矩阵 - BZOJ

    Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤2 ...

  9. 1084. [SCOI2005]最大子矩阵【网格DP】

    Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵 不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤ ...

随机推荐

  1. ORACLE Postgresql中文排序

    当我们order排序不能够实现我们想要的内容时候,尝试一下NLSSORT这个函数吧 他不仅仅按照姓氏排序,名也会排序: nls_param用于指定语言特征,格式为nls_sort      = sor ...

  2. php知识点总结(一)

    1.把数组以表格的形式显示 <?php $array = array( '书籍' =>  array( '生活',  '人与自然','动物世界'), '体育用品' =>  array ...

  3. .NET操作RabbitMQ组件EasyNetQ使用中文简版文档。

    本文出自EasyNetQ官方文档,内容为自己理解加翻译.文档地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Quick-Start EasyNetQ简介 Ea ...

  4. 使用AOP的方式监测方法执行耗时

    在一些对系统中,往往可能需要对一些核心业务做相应的监测.如:记录调用参数,返回值,方法执行耗时等等.如果直接在方法的前后加入代码,如下: public int F(int a, string s) { ...

  5. webservice_模拟报文测试

    一.WebService测试小工具STORM  二.利用MyEclipse的WebService视图调用webservice Ø   除了客户端生成代码编写程序调用之外.还可以用MyEclipse提供 ...

  6. 各类编译器 allocator 底层

    我们在c++中创建数组通常使用new来分配我们需要的内存大小,之后通过delete进行释放内存 但是我们调用new的时候,通过调用的是operator new,二operator new调用的是mal ...

  7. IOS之TableViewCell重用机制解决上下刷新重复显示

    首先我是一个经验浅薄的iOS开发人员,这个问题想必许多初学者经常遇到这些问题,在面试中也会经常问到.现在我们一一解决. 首先我们要知道TableViewCell重用机制的原理是什么,我们抽象的理解为古 ...

  8. .NET Core在WindowsServer服务器部署及发布

    VS使用WEB DEPLOY发布.NET Core程序   背景是这样的,公司有两台服务器,平时一台备用,另一台做为主生产机器.当有大量补丁或者安装什么东西需要重启的时候,交其中一台直接关掉IIS,然 ...

  9. udp 双机通信(服务器循环检测)2

    此文摘自:http://blog.csdn.net/qinpeng100423/article/details/8980423,谢谢了 自己上一篇写的udp通信,只能运行一次,参考了这位博主的,只是把 ...

  10. 前端开发面试题总结之——CSS3

    ____________________________________________________________________________________________ 相关知识点 布 ...