首页 > 代码库 > 【Codevs 2630】宝库通道
【Codevs 2630】宝库通道
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】宝库通道
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。