题目大意:在一个N * M的格子中,放有一些糖,这些糖有的会损害健康,有的对健康有益。有损害的被记为负数,有益的会记为正数。另外,对于每一个糖而言,他都比左边的糖和上面的糖更健康。

现在我要在在N*M这个矩阵中找到一个子矩阵,使得所有糖的有益值加起来最大。

题目已经是简化了的。糖果按照左上最小,右下最大的顺序排列好了。所以很明显从右下角的糖是肯定要拿走的,所以从这个格子开始枚举。但是枚举的话会超时,该怎么处理呢?

再想一下,发现题目不涉及更新操作,只有求和的部分。所以可以预处理出所有的和,并存在对应的格子中。比如map[i][j]中存着 map[ 1..i ][ 1..j ]共计 i * j 个数的和。这样只要遍历所有格子,取出最大值就可以了。这样算法的复杂度就变成 O(nm)了。很明显可以接受,而且写法也简单。

特别的,这里可以有一些特殊处理,可以更方便的写代码。

例如输入的时候从(m, n)开始输入,让最大值的位置变到左上角,最小值到右下角。

求和的时候一个一个累加过去 map[ i ][ j ] += map[ i ][ j-1 ],之后再 map[ i ][ j ] += map[ i–1 ][ j ]。这样就能保证map[ i ][ j ]存的是其左上角的所有格子的和。

下面附上代码:

/*
* Problem: I
* Date: 2014-7-20
* Author: Wuhen
*/
#include <map>
#include <list>
#include <queue>
#include <string>
#include <vector>
#include <cstdarg>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#define LL __int64
#define Clean(a) memset(a, 0, sizeof(a)) using namespace std; LL ditu[1009][1009];
LL max(LL a, LL b)
{
return ((a > b) ? a : b);
} int main()
{
std::ios::sync_with_stdio(false);
LL n, m;
LL T;
scanf("%I64d", &T);
while(T--)
{
scanf("%I64d%I64d", &n, &m);
Clean(ditu);
for (LL i = n; i > 0; i--)
for (LL j = m; j > 0; j--)
scanf("%I64d", &ditu[i][j]); for (LL i = 1; i <= n; i++)
for (LL j = 2; j <= m; j++)
ditu[i][j] += ditu[i][j-1]; for (LL i = 2; i <= n; i++)
for (LL j = 1; j <= m; j++)
ditu[i][j] += ditu[i-1][j]; LL res = ditu[1][1]; for (LL i = 1; i <= n; i++)
for (LL j = 1; j <= m; j++)
res = max(res, ditu[i][j]);
printf("%I64d\n", res);
}
return 0;
}

Omar Loves Candies的更多相关文章

  1. ZeptoLab Code Rush 2015 C. Om Nom and Candies 暴力

    C. Om Nom and Candies Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/526 ...

  2. ZeptoLab Code Rush 2015 C. Om Nom and Candies [ 数学 ]

    传送门 C. Om Nom and Candies time limit per test 1 second memory limit per test 256 megabytes input sta ...

  3. ZOJ 3715 Kindergarten Election

    At the beginning of the semester in kindergarten, the n little kids (indexed from 1 to n, for conven ...

  4. Zepto Code Rush 2014-A. Feed with Candy(HACK)

    A. Feed with Candy time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. HDU 5380 Travel with candy 单调队列

    pid=5380">链接 题解链接:http://www.cygmasot.com/index.php/2015/08/16/hdu_5380 题意: n C 一条数轴上有n+1个加油 ...

  6. Microsoft Loves Linux

    微软新任CEO纳德拉提出的“Microsoft Loves Linux”,并且微软宣布.NET框架的开源,近期Microsoft不但宣布了Linux平台的SQL Server,还宣布了Microsof ...

  7. 5806 NanoApe Loves Sequence Ⅱ(尺取法)

    传送门 NanoApe Loves Sequence Ⅱ Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/131072 K ...

  8. 5805 NanoApe Loves Sequence(想法题)

    传送门 NanoApe Loves Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/131072 K ( ...

  9. CF444C. DZY Loves Colors[线段树 区间]

    C. DZY Loves Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

随机推荐

  1. 雷林鹏分享:Ruby 环境变量

    Ruby 环境变量 Ruby 解释器使用下列环境变量来控制它的行为.ENV 对象包含了所有当前设置的环境变量列表. 变量描述 DLN_LIBRARY_PATH动态加载模块搜索的路径. HOME当没有参 ...

  2. OAF 获取页面路径

    --模糊查询某个页面 SELECT * FROM JDR_PATHS jp WHERE JP.PATH_NAME LIKE '%XXXX%'; --精确的查找过程 -- DocID --参数通过关于此 ...

  3. OC 属性关键字

    // 属性关键字 /* 1.ARC下(自动管理内存,自动引用计数)(IOS) strong,weak ----------------------------------------- 2.MRC下( ...

  4. JavaScript学习总结(九)——Javascript面向(基于)对象编程

    一.澄清概念 1.JS中"基于对象=面向对象" 2.JS中没有类(Class),但是它取了一个新的名字叫“原型对象”,因此"类=原型对象" 二.类(原型对象)和 ...

  5. SPOJ UMR 10A 计算几何

    DES:顺时针给出构成凸多边形的点.然后有Q个询问任意给出两个点的编号,询问由这两个点的连线将多边形分成的两部分面积较小的部分面积大小. 比赛时直接每次连线后求多边形求面积超时了.正确解法是求出利用叉 ...

  6. learngin uboot design parameter recovery mechanism

    pseudocode: if( getenv(“uboot_env_init”)  !=  NULL){ if(uboot_env_init  !=  HAVE_INIT){ Set uboot_en ...

  7. Maven 入门篇 ( 上 )

    写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法.这个入门篇分上下两篇.本文着重动手,用 maven 来构建运行 hello ...

  8. Oracle Rman 增量备份与差异备份

    一.增量与差异 关于Incremental增量备份级别: Oracle 9i 共有五种级别 0 1 2 3 4,0级最高-4级最低,0级是1级的基础以此类推. Oracle 10g官方文档明确指出增量 ...

  9. Struts2国际化——完整实例代码

    一.介绍 国际化Internationalization的首末字符I和N之间字符数是18,简称I18N “国际化”是指一个应用程序在运行时,能够根据客户端请求所来自国家或地区语言的不同,而显示不同的语 ...

  10. Kafka消费者APi

    Kafka客户端从集群中消费消息,并透明地处理kafka集群中出现故障服务器,透明地调节适应集群中变化的数据分区.也和服务器交互,平衡均衡消费者. public class KafkaConsumer ...