求捞,这个代码的时间复杂度为什么是o(n^3)
  • 板块学术版
  • 楼主hnyn
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/3/26 19:20
  • 上次更新2024/3/26 21:41:41
查看原帖
求捞,这个代码的时间复杂度为什么是o(n^3)
1288805
hnyn楼主2024/3/26 19:20

https://www.luogu.com.cn/problem/P8783

hh与tt不是最远到达n吗?两层for,o(n^2),内层循环也是o(n^2),不就是o(n^4)了吗?
迷茫ing,时间复杂度不会算o(╥﹏╥)o
对于 30%的数据,N,M≤20,
对于 70%的数据,N,M≤100,
对于 100%的数据,1≤N,M≤500;0≤Aij≤1000;
1≤K≤2.5×10的八次方。
#include<iostream>
using namespace std;
const int N=1e3;
long long a[N][N],s[N][N];
long long cnt=0;
int main(){
    int n,m,k;
    scanf("%d %d %d",&n,&m,&k);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            scanf("%lld",&a[i][j]);
        }//录入数据
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
        }//前缀和
    }
    for(int i=1; i<=m; i++){
        for(int j=i; j<=m; j++){//前两个for,对所有列进行枚举
            for(int tt=1,hh=1;hh<=n;hh++){
                while(tt<=hh&&s[hh][j]-s[hh][i-1]-s[tt-1][j]+s[tt-1][i-1]>k)tt++;
                if(tt<=hh)cnt+=hh-tt+1;
            }
        }
    }
    printf("%lld",cnt);
    return 0;
}
2024/3/26 19:20
加载中...