问题标题: 酷町堂:1290 糖果盒(candybox)

0
0
已解决
李博然
李博然
资深守护
资深守护
#include<iostream>
using namespace std;
int n,m,a[301][301],s[301][301],f[301][301],f1[301][301],ans;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
            if(a[i][j]==0)a[i][j]=-100000000;
            s[i][j]=s[i][j-1]+a[i][j];
        }
    }
    for(int i=1;i<=m;i++)
    {
        for(int j=i;j<=m;j++)
        {
            for(int k=1;k<=n;k++)
            {
                f1[i][j]=max(f1[i][j],0)+s[k][j]-s[k][i-1];
                f[i][j]=max(f[i][j],f1[i][j]);
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            ans=max(ans,f[i][j]); 
        }
    }
    cout<<ans;
    return 0;
} 

1290   糖果盒(candybox)经验值:1200

不许抄袭,一旦发现,直接清空经验!

题目描述 Description

卡卡西帮影院经理解决了难题,终于可以和妈妈安心的观看了电影。电影太精彩了,卡卡西在电影放映过程中,多次拍手叫好。放映结束后,卡卡西正准备和妈妈牵手回家,被影院经理拦住了。那位和蔼的叔叔满脸笑容的对卡卡西说:“小朋友,谢谢你之前帮我解决了难题,这可帮了我一个大忙啊!作为对你的感谢,我想赠送你这个糖果盒。这个糖果盒可不一般哦,只有足够聪慧,回答对问题并完成任务的小朋友,才能从中取出糖果”。
卡卡西痴迷的望着这个金光闪闪的糖果盒,瞪大的双眼里充满了好奇。这是一个被分为N*M个格子的飘着芳香的糖果盒,第i行第j列位置的格子里面有a[i][j]颗糖。但是经理告诉卡卡西,不幸的是,前一天晚上,一只极其可恶的老鼠夜袭糖果盒,有部分格子被洗劫并且穿了洞。为了让糖果盒保持美观,必须从这个糖果盒里面切割出一个新的不能有洞的矩形糖果盒,并且卡卡西希望保留在新糖果盒内的糖的总数尽量多,这样她就能吃到尽可能多的糖。
小朋友们,请你们帮卡卡西设计一个程序,计算一下新糖果盒里最多能够保留多少糖果,从而使卡卡西获得这个糖果礼盒。

输入描述 Input Description

共N+1行,第一行有两个正整数N和M(1≤N≤300,1≤M≤300)。后面N行每行M个正整数,第i+1行的第j个正整数a[i][j](0≤a[i][j]≤255),表示糖果盒的第i行第j个格子里的糖果个数,如果这个数为0,则表示这个位置的格子被老鼠洗劫过,即该位置是个洞。

输出描述 Output Description

输出一个正整数,即能得到的最大糖果数。

样例输入 Sample Input

3 4 1 2 3 4 5 0 6 3 10 3 4 0

样例输出 Sample Output

17

数据范围及提示 Data Size & Hint

样例解释:
image.png
糖果盒为3*4,糖果盒的第2行第2个格子和第3行第4个格子的糖果被老鼠吃了,现在是个洞,从中切割出一个包含尽可能多的糖果的不能有洞的矩形糖果盒为红色标注区域,糖果数为17。
40%的数据,1≤N≤10,1≤M≤10


0
已采纳
李显晨
李显晨
中级启示者
中级启示者

把27行改成从i到m

本人已AC

0
我要回答