zoukankan      html  css  js  c++  java
  • P2706 巧克力

    题目背景

    王7的生日到了,他的弟弟准备送他巧克力。

    题目描述

    有一个被分成n*m格的巧克力盒,在(i,j)的位置上有a[i,j]块巧克力。就在送出它的前一天晚上,有老鼠夜袭巧克力盒,某些位置上被洗劫并且穿了洞。所以,你——王7的弟弟王八王9,必须从这个满目苍夷的盒子中切割出一个矩形巧克力盒,其中不能有被老鼠洗劫过的格子且使这个盒子里的巧克力尽量多。

    输入格式

    第一行有两个整数 n、m。第 i+1行的第 j 个数表示a[ i , j ]。如果这个数为 0 ,则表示这个位置的格子被洗劫过。

    输出格式

    输出最大巧克力数。

    输入输出样例

    输入 #1
    3 4
    1 2 3 4
    5 0 6 3
    10 3 4 0
    输出 #1
    17
    //10 3 4这个矩形的巧克力数最大

    说明/提示

    1≤n,m≤300

    0≤a[i,j]≤255

    整体的思路是建一个2维的数组,

    首先0的位置不可选择,所以赋值为-inf,问题就变成最大子矩阵了

    这个可以前缀和啦

    我们可以枚举一个行数,在枚举另一个行数,来表示矩阵的上下,然后中间的每一个点都必须要选择,所以可以纵向压缩成一个点

    虽然是一个N^3的算法但我还是骗了83分(能拿分的算法就是好算法)

    尽管有人说把快读去掉就能A。。。。。。

    #include<cstdio>
    #include<iostream>
    
    #define inf 1<<25
    
    #define ll long long
    
    using namespace std;
    
    ll n,m;
    
    ll map[310][310],s[310],up[310][310];
    
    ll ans;
    
    int i,j,k;
    
    inline int read(){
        int s=0,w=1;
        char ch=getchar();
        while(ch<'0'||ch>'9'){
            if(ch=='-'){
                w=-1;
            }
            ch=getchar();
        }
        while(ch>='0'&&ch<='9'){
            s=s*10+ch-'0';
            ch=getchar();
        }
        return s*w;
    }
    
    int main(){
        n=read();
        m=read();
        for(i=1;i<=n;++i){
            for(j=1;j<=m;++j){
                map[i][j]=read();
                if(!map[i][j]){
                    map[i][j]=-inf;
                }
                up[i][j]=up[i-1][j]+map[i][j];
            }
        }
        for(i=1;i<=n;++i){
            for(j=i;j<=n;++j){
                ll mi=0;
                for(k=1;k<=m;++k){
                    s[k]=s[k-1]+up[j][k]-up[i-1][k];
                }
                for(k=1;k<=m;++k){
                    ans=max(ans,s[k]-mi);
                    mi=min(s[k],mi);
                }
            }
        }
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    RocketMQ中Producer消息的发送源码分析
    VS等待调试
    Window&Linux遍历某一文件夹
    遍历当前USB设备信息
    批处理常用符号详解
    Windows 批处理(bat)语法大全
    Windows CMD命令大全(值得收藏)
    遍历文件夹
    ASCII,UTF-8,Unicode字符串相互转换
    shellexecute的使用和X64判断
  • 原文地址:https://www.cnblogs.com/hrj1/p/11717332.html
Copyright © 2011-2022 走看看