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

    题目

    (第一道绿题)

    有点像最大子矩阵qwq

    用前缀和存图,l,r代表横向的一段区间,区间和就是a[r]-a[l-1]

    然后用一个k从上到下dp...因为每次l,r变化的时候原来的k就没有用了,所以k开一个表示第几行的一维数组,把最大值记下来就行qwq

    特殊的是如果为0是不能选择的...改成-∞就可以了

    #include<cstdio>
    #include<iostream>
    using namespace std;
    const int INF = -1000005;
    int n,m;
    long long k,ans,a[350][350],sum[1000005];
    int main() {
        scanf("%d%d",&n,&m);
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= m; j++) {
                scanf("%lld",&k);
                if(k == 0)k = INF;
                a[i][j] = k + a[i][j-1];
            }
    
        for(int l = 1; l <= m; l++)
            for(int r = l; r <= m; r++)
                for(int k = 1; k <= n; k++) {
                    sum[k] = a[k][r] - a[k][l-1];
                    sum[k] = max(sum[k],sum[k]+sum[k-1]);
                    ans = max(ans,sum[k]);
                }
        printf("%lld",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    类和对象
    数组
    循环结构
    选择结构
    变量,数据类型和运算符
    什么是JDBC,JDBC的使用
    重拾JavaScript
    git使用日记
    Base包
    RabbitMQ(windows环境)下载与安装
  • 原文地址:https://www.cnblogs.com/mogeko/p/9859317.html
Copyright © 2011-2022 走看看