zoukankan      html  css  js  c++  java
  • bzoj:1723: [Usaco2009 Feb]The Leprechaun 寻宝

    Description

    你难以想象贝茜看到一只妖精在牧场出现时是多么的惊讶.她不是傻瓜,立即猛扑过去,用她那灵活的牛蹄抓住了那只妖精.
        “你可以许一个愿望,傻大个儿!”妖精说.
        “财富,”贝茜用梦游般的声音回答道,  “我要获得财富的机会.”
        妖精从来没有碰到过这么简单的愿望.他在地方划出一大块N×N(1≤N≤200)的方格,每个格子上写上_1,000,000到1,000,000之间的数字.他说:  “在方格上朝一个方向行走,可以是行的方向,列的方向,斜对角的方向,一步只能走一格,所有你踩过的数字的和就是你的财富.”
        贝茜请你来帮忙,找到一行、一列或一条对角线上找一段连续的数字,它们的和最大.由于妖精方格的神奇特性,沿着一个方向走,走到了边际,再一步跨过去可以“绕”到方格的对边出现.一行两端的格子是相邻的,一列两端的格子也是相邻的,甚至相邻两行的分别两端的格子也是相邻的(斜对角方向).
        对于下图左边的方格,所有标记过的数字都在一条对角线上.
      
     
    对于这个方格,能踩出来的最大的和是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
     
     
     
    这么差的代码居然#1了……233
    暴力枚举不解释,维护前缀和就好了,当然记得要找出最大区间的同时可以找一下最小区间,用总和减最小区间也可以是一种答案
    然后注意至少要踩一个格子(被卡了3发……)
     
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    
    int n,h[200][202],l[200][202],g[200][202],f[200][202],m,i,j;
    int main(){
        scanf("%d",&n);
        for (i=0;i<n;i++)
        for (j=0;j<n;j++){
            scanf("%d",&m);
            h[i][j]=h[i][j-1]+m;l[j][i]=l[j][i-1]+m;g[(i-j+2*n)%n][i]=g[(i-j+2*n)%n][i-1]+m;f[(i+j)%n][i]=f[(i+j)%n][i-1]+m;
        }
        for (i=0;i<n;i++)
        for (j=0;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-1]-(h[i][j-1]-h[i][n+1])) m=h[i][n-1]-(h[i][j-1]-h[i][n+1]);
            if (m<l[i][n-1]-(l[i][j-1]-l[i][n+1])) m=l[i][n-1]-(l[i][j-1]-l[i][n+1]);
            if (m<g[i][n-1]-(g[i][j-1]-g[i][n+1])) m=g[i][n-1]-(g[i][j-1]-g[i][n+1]);
            if (m<f[i][n-1]-(f[i][j-1]-f[i][n+1])) m=f[i][n-1]-(f[i][j-1]-f[i][n+1]);
            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+1]<h[i][j]) h[i][n+1]=h[i][j];
            if (l[i][n+1]<l[i][j]) l[i][n+1]=l[i][j];
            if (g[i][n+1]<g[i][j]) g[i][n+1]=g[i][j];
            if (f[i][n+1]<f[i][j]) f[i][n+1]=f[i][j];
        }
        printf("%d
    ",m);
    }

    这代码略优美……

  • 相关阅读:
    grunt in webstorm
    10+ Best Responsive HTML5 AngularJS Templates
    响应式布局
    responsive grid
    responsive layout
    js event bubble and capturing
    Understanding Service Types
    To add private variable to this Javascript literal object
    Centering HTML elements larger than their parents
    java5 新特性
  • 原文地址:https://www.cnblogs.com/Enceladus/p/5037420.html
Copyright © 2011-2022 走看看