在CSP初赛试题中发现了一个BUG
  • 板块学术版
  • 楼主Fallenrain
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/9/10 18:22
  • 上次更新2023/11/2 21:35:23
查看原帖
在CSP初赛试题中发现了一个BUG
1053216
Fallenrain楼主2023/9/10 18:22
#include<bits/stdc++.h>
using namespace std;

int f[1<<16]={},g[1<<16]={},h[1<<16]={};
int main(){
	int n;// 0<n<16
	cin>>n;
	for(int i=1;i<(1<<16);i++){
		int t=(i&-i);
		f[i]=f[i^t]+1;
	}
	for(int i=1;i<(i<<n);i++){
		for(int j=i;j>0;j=i&(j-1)){
			g[i]=max(g[i],g[j]+1);
		}
	}
	for(int i=1;i<(1<<16);i++){
		for(int j=0;j<n;j++){
			h[i]+=(i>>j&1);
		}
	}
	return 0;
} 

我记得B站上是说:有多少个循环,时间复杂度就是多少。 但是按照这个说法:计算f数组的复杂度为O(n)(一个循环),但答案是O(n²)。 计算g数组的复杂度是O(n²)(双重循环),但答案是O(n³)。 计算h数组的复杂度为O(n²)(双重循环),但答案是O(n³)。 我想知道是我出错了,还是题目有问题,感谢各位dalao回答。

2023/9/10 18:22
加载中...