首页 > 其他 > 详细

【Codevs 2630】宝库通道

时间:2016-10-18 22:54:01      阅读:209      评论:0      收藏:0      [点我收藏+]

http://codevs.cn/problem/2630/

Solution

预处理f[i][j],代表第j列前i行的代价

枚举上下界,然后做最大子段和,g[i]代表选到第i列的代价,

  g[k]=(g[k-1]<0?0:g[k-1])+f[j][k]-f[i-1][k]

复杂度O(n^3)

Notice

注意赋初值

// <2630.cpp> - Tue Oct 18 20:36:24 2016
// This file is made by YJinpeng,created by XuYike‘s black technology automatically.
// Copyright (C) 2016 ChangJun High School, Inc.
// I don‘t know what this program is.

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const int MAXN=410;
int g[MAXN],f[MAXN][MAXN];
int main()
{
    freopen("2630.in","r",stdin);
    freopen("2630.out","w",stdout);
    int n,m,ans=0;scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            char ch=getchar();
            while(ch!=0&&ch!=1)ch=getchar();
            f[i][j]=f[i-1][j]+(ch==0?-1:1);
        }
    for(int i=1;i<=n;i++)
        for(int j=i;j<=n;j++)
            for(int k=1;k<=m;k++)
                g[k]=(g[k-1]<0?0:g[k-1])+f[j][k]-f[i-1][k],ans=max(g[k],ans);
    printf("%d\n",ans);
    return 0;
}

 

【Codevs 2630】宝库通道

原文:http://www.cnblogs.com/YJinpeng/p/5975095.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!