bzoj:1723: [Usaco2009 Feb]The Leprechaun 寻宝

时间:2023-03-08 23:48:11
bzoj:1723: [Usaco2009 Feb]The Leprechaun 寻宝

Description

你难以想象贝茜看到一只妖精在牧场出现时是多么的惊讶.她不是傻瓜,立即猛扑过去,用她那灵活的牛蹄抓住了那只妖精.
    “你可以许一个愿望,傻大个儿!”妖精说.
    “财富,”贝茜用梦游般的声音回答道,  “我要获得财富的机会.”
    妖精从来没有碰到过这么简单的愿望.他在地方划出一大块N×N(1≤N≤200)的方格,每个格子上写上_1,000,000到1,000,000之间的数字.他说:  “在方格上朝一个方向行走,可以是行的方向,列的方向,斜对角的方向,一步只能走一格,所有你踩过的数字的和就是你的财富.”
    贝茜请你来帮忙,找到一行、一列或一条对角线上找一段连续的数字,它们的和最大.由于妖精方格的神奇特性,沿着一个方向走,走到了边际,再一步跨过去可以“绕”到方格的对边出现.一行两端的格子是相邻的,一列两端的格子也是相邻的,甚至相邻两行的分别两端的格子也是相邻的(斜对角方向).
    对于下图左边的方格,所有标记过的数字都在一条对角线上.
  bzoj:1723: [Usaco2009 Feb]The Leprechaun 寻宝
对于这个方格,能踩出来的最大的和是24,踩过的数字在右图中标记出来了

Input

    第1行输入N,之后输入N行N列的矩阵.

Output

    输出最大的和.

Sample Input

4
8 6 6 1
-3 4 0 5
4 2 1 9
1 -9 9 -2

Sample Output

24
bzoj:1723: [Usaco2009 Feb]The Leprechaun 寻宝
bzoj:1723: [Usaco2009 Feb]The Leprechaun 寻宝
 
这么差的代码居然#1了……233
暴力枚举不解释,维护前缀和就好了,当然记得要找出最大区间的同时可以找一下最小区间,用总和减最小区间也可以是一种答案
然后注意至少要踩一个格子(被卡了3发……)
 
#include<cstdio>
#include<algorithm>
using namespace std; int n,h[][],l[][],g[][],f[][],m,i,j;
int main(){
scanf("%d",&n);
for (i=;i<n;i++)
for (j=;j<n;j++){
scanf("%d",&m);
h[i][j]=h[i][j-]+m;l[j][i]=l[j][i-]+m;g[(i-j+*n)%n][i]=g[(i-j+*n)%n][i-]+m;f[(i+j)%n][i]=f[(i+j)%n][i-]+m;
}
for (i=;i<n;i++)
for (j=;j<n;j++){
if (m<h[i][j]-h[i][n]) m=h[i][j]-h[i][n];
if (m<l[i][j]-l[i][n]) m=l[i][j]-l[i][n];
if (m<g[i][j]-g[i][n]) m=g[i][j]-g[i][n];
if (m<f[i][j]-f[i][n]) m=f[i][j]-f[i][n];
if (m<h[i][n-]-(h[i][j-]-h[i][n+])) m=h[i][n-]-(h[i][j-]-h[i][n+]);
if (m<l[i][n-]-(l[i][j-]-l[i][n+])) m=l[i][n-]-(l[i][j-]-l[i][n+]);
if (m<g[i][n-]-(g[i][j-]-g[i][n+])) m=g[i][n-]-(g[i][j-]-g[i][n+]);
if (m<f[i][n-]-(f[i][j-]-f[i][n+])) m=f[i][n-]-(f[i][j-]-f[i][n+]);
if (h[i][n]>h[i][j]) h[i][n]=h[i][j];
if (l[i][n]>l[i][j]) l[i][n]=l[i][j];
if (g[i][n]>g[i][j]) g[i][n]=g[i][j];
if (f[i][n]>f[i][j]) f[i][n]=f[i][j];
if (h[i][n+]<h[i][j]) h[i][n+]=h[i][j];
if (l[i][n+]<l[i][j]) l[i][n+]=l[i][j];
if (g[i][n+]<g[i][j]) g[i][n+]=g[i][j];
if (f[i][n+]<f[i][j]) f[i][n+]=f[i][j];
}
printf("%d\n",m);
}

这代码略优美……