沙盘游戏(2017绍兴市第十五届少儿信息学竞赛复赛试题)

沙盘游戏

Ivy是如此地喜欢编程,以至于在面对游戏时也是如此。在沙盘游戏中有一个巨大的方形沙盘(长方形或者正方形),该沙盘被分隔成边长为1的小方格,每个小方格内有一个整数。沙盘玩家需要在沙盘中圈出一个方形(长方形或者正方形都可以)的区域(必须沿着小方格的边界划线,不能穿过小方格的内部),目标是争取被圈区域内的整数之和最大。
为了描述方便,Ivy把这个沙盘用n*m个整数来表示,每个整数所在位置表示沙盘中一个边长为1的小方格。
Ivy现在需要编程解决这样一个问题:在n*m(n行m列)个整数中选择一个x*y(x行y列)的方形区域(x最大可达n,y最大可达m),使得这x*y个整数之和是所有可以选择的方形区域中最大的,并输出这个最大总和值。

输入

第一行包含n和m二个整数,中间用一个空格分隔,分别表示原始方形区域中所包含的行数和列数。
下面有n行,每行m个整数(每个整数的范围是-200到200)组成的数据。

输出

一行一个整数,表示某个被圈出的方形区域中所有位置上整数之和,该值必须是所有可以圈出的方形区域所对应整数和中,总和最大的那个,该值确保不超过106 。

n,m<280;

样例输入

3  3
10 -21 9
7 8 4
-6 1 0

样例输出

19

(n*m)^2的复杂度肯定是不行的,这就需要优化一下了;

首先维护一个二维前缀和;然后遍历x坐标的所有区间(n^2)

然后遍历Y轴(m),每次维护一个大于零的底边;也就是说如果Y遍历的时候得到的子矩阵和小于零,更新底边,(下次的时候再加前面没意义了)

所以这样就优化到(n*n*m)的复杂度

代码呈上;

#include <bits/stdc++.h>
#define maxn 1000005
using namespace std;
typedef long long ll;
using namespace std;
int main()
{
    int s[300][300];
    int a[300][300];
    memset(s,0,sizeof(s));
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            scanf("%d",&a[i][j]);
            s[i][j]+=a[i][j];
            s[i][j]+=s[i-1][j];
            s[i][j]+=s[i][j-1];
            s[i][j]-=s[i-1][j-1];
        }
    }
    /*for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            printf("%d  ",s[i][j]);
        }
        printf("\n");
    }
    */
    int maxx=-1e8;
    for(int i=1; i<=n; i++)
    {
        for(int j=0; j<i; j++)
        {
            int rec=0;
            for(int w=1; w<=m; w++)
            {
                if(s[i][w]-s[j][w]-s[i][rec]+s[j][rec]>0)
                {
                    if(s[i][w]-s[j][w]-s[i][rec]+s[j][rec]>maxx)
                    {
                        maxx=s[i][w]-s[j][w]-s[i][rec]+s[j][rec];
                        //printf("%d %d %d %d\n",i,j,w,rec);
                    }
                }
                else
                {
                    if(s[i][w]-s[j][w]-s[i][rec]+s[j][rec]>maxx)
                    {
                        maxx=s[i][w]-s[j][w]-s[i][rec]+s[j][rec];
                        //printf("%d %d %d %d\n",i,j,w,rec);
                    }
                    rec=w;
                }
            }
        }
    }
    printf("%d\n",maxx);
    return 0;
}

原文地址:https://www.cnblogs.com/xiaolaji/p/9533179.html

时间: 2024-10-07 18:52:56

沙盘游戏(2017绍兴市第十五届少儿信息学竞赛复赛试题)的相关文章

2017第十五届中部(湖南)糖酒食品交易会

 2017第十五届中部(湖南)糖酒食品交易会 2017年6月2日-4日   湖南国际会展中心(广电中心)     湖南糖酒食品交易会(简称"湖南糖酒会") ,经过每年春秋两届的成功举办,已经成长为中部地区集规模.品质.人气.效果于一体的极具影响力的糖酒食品行业专业盛会.仁创·第十五届中部(湖南)糖酒食品交易会经过持续对行业和中部6省专业买家的深耕和积累,仁创·湖南糖酒会已成为酒水.食品企业开发中部地区的招商.团购首选平台,和湖南.湖北.江西.广东等地区行业经销代理商每年度寻找商机.交流

2017第十五届中国国际工业炉及热处理技术展览会

The 15h China International Industrial Furnaces Exhibitio 时间:2017年6月13日-16日 地点:上海新国际博览中心 上海市浦东新区龙阳路2345号 主办单位: 中国铸造协会 中国机械工程学会 中国钢铁工业协会 中国国际贸易促进委员会冶金行业分会 国内承办: 中国机械工程学会工业炉分会 国外承办:汉诺威米兰展览(上海)有限公司 基本信息: ──国际展览联盟 (UFI) 认证的国际知名展览会 ──世界第二大冶金及金属热加工展览会 ──每届

第十五届中国研究生数学建模竞赛之机场登机口调度

第十五届中国研究生数学建模竞赛之机场登机口调度 1.问题描述 具体题目文件见:https://github.com/luoshui3000/Airport_gate_scheduling 问题一:本题只考虑航班-登机口分配.作为分析新建卫星厅对航班影响问题的第一步,首先要建立数学优化模型,尽可能多地分配航班到合适的登机口,并且在此基础上最小化被使用登机口的数量.本问题不需要考虑中转旅客的换乘,但要求把建立的数学模型进行编程,求最优解. 2.使用方法 我们根据登机口和航班的宽窄机和航线性质,将所有

第二十四届全国青少年信息学奥林匹克联赛初赛 普及组C++语言试题

第二十四届全国青少年信息学奥林匹克联赛初赛 普及组C++语言试题 1.原题呈现 2.试题答案 3.题目解析 因博客园无法打出公式等,所以给你们几个小编推荐的链接去看看,在这里小编深感抱歉! https://blog.csdn.net/Lu_Anlai/article/details/85490641 https://blog.csdn.net/Ronaldo7_ZYB/article/details/83098444 来源:CSDN 编辑:疯狂的杰克 原文地址:https://www.cnblo

2017西安电子科技大学第十五届“华为杯”大学生程序设计竞赛网络赛

问题 B: 笑爷买房 时间限制: 1 Sec  内存限制: 128 MB提交: 456  解决: 116[提交][状态][讨论版] 题目描述 笑爷打算在北京三环买一套房. 现在笑爷手上有一些房源的户型图,她想知道每套房屋的室内面积是多少.房屋的墙壁由'#'表示,一平方米的地面由一个'*'表示.请统计被墙壁包围住的地面面积是多少平方米. 输入 一个由#和*组成的字符矩阵,行列数均不超过50.(不一定是矩形) 输出 输出房屋有多少平方米并换行. 样例输入 #*####### ##******# *#

杭电OJ第十五届ACM第一题 Hearthstone

Problem Description   Cdfpysw loves playing a card game called "Hearthstone".   Now he has N cards, he wants to split these cards into 4 piles. Let's assume the number of cards in each pile is a1, a2, a3, a4.   It must be satisfied that:     a1

第十五届北京师范大学程序设计竞赛现场决赛题解

C. Captcha Cracker题目大意:给一个字符串,识别出0,2,4,6,9以及英文单词并按照出现顺序输出.通过人数/提交人数:60/62题目解法:直接模拟. F. Find Quailty题目大意:给一个凸多边形,求出从不在多边形内一点??出发走不超过??距离且不进入多边形内部所能到的区域面积.通过人数/提交人数:0/3题目解法:圆面积减去圆和凸多边形交的面积是显然不对的. 如果??不在边界上,过??作两条凸包的切线,那么区域被分为两部分,其中一部分如下图所示,只需要计算圆和简单多边形

分布式技术追踪 2017年第二十五期

分布式系统实践 1. 获得PCC性能大赛背后的RocksDB引擎:5分钟全面了解其原理 http://dwz.cn/68s1H8 摘要: RocksDB是Google LevelDB的优化版本, 由facebook开源, 本文简要介绍了RocksDB的特性. 2. 一篇文章掌握Sql-On-Hadoop核心技术 http://dwz.cn/69U8Gv 摘要: 这篇文章对查询引擎的技术总结的很到位, 推荐对查询引擎感兴趣的同学阅读. 微服务技术 1. 微服务入门指南 http://dwz.cn/

浙大第十五届校赛 G-Cylinder Candy

Cylinder Candy Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge Edward the confectioner is making a new batch of chocolate covered candy. Each candy center is shaped as a cylinder with radius r mm and height h mm. The candy center