T1.5838. 旅游路线

首先想到O(n^4)枚举两个点,用前缀和算,但是200会T。

考虑枚举一条扫描线,这是O(n^2)的,扫描用O(n),就可以了。

当前和已经小于0,就可以舍去了。

#include<iostream>
#include<cstdio>

using namespace std;

inline int rd(){
    int ret=0,f=1;char c;
    while(c=getchar(),!isdigit(c))f=c=='-'?-1:1;
    while(isdigit(c))ret=ret*10+c-'0',c=getchar();
    return ret*f;
}

const int MAXN=256;

int n,m;
int a[MAXN][MAXN];
int s[MAXN][MAXN];

int main(){
    n=rd();m=rd();
    for(register int i=1;i<=n;i++){
        for(register int j=1;j<=m;j++){
            a[i][j]=rd();
        }
    }
    for(register int i=1;i<=n;i++){
        for(register int j=1;j<=m;j++){
            s[i][j]=s[i][j-1]+a[i][j];
        }
    }
    long long ans=0;
    for(register int i=1;i<=m;i++){
        for(register int j=1;j<=i;j++){
            long long tmp=0;
            for(register int k=1;k<=n;k++){
                tmp+=1ll*s[k][i]-s[k][j-1];
                ans=max(ans,tmp);
                if(tmp<0) tmp=0;//
            }
        }
    }
    
    printf("%lld\n",ans);


    return 0;
}
View Code

相关文章:

  • 2022-12-23
  • 2021-10-08
  • 2021-08-09
  • 2020-11-04
  • 2018-10-28
  • 2021-08-08
  • 2021-10-17
  • 2021-06-27
猜你喜欢
  • 2021-06-25
  • 2021-06-20
  • 2022-02-23
  • 2021-12-25
  • 2021-07-21
  • 2022-12-23
相关资源
相似解决方案