求助脑瘫考试题的一道题目的时间复杂度
  • 板块学术版
  • 楼主CuSO4_and_5H2O
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/9/24 20:54
  • 上次更新2023/10/27 10:05:26
查看原帖
求助脑瘫考试题的一道题目的时间复杂度
231946
CuSO4_and_5H2O楼主2022/9/24 20:54

脑瘫考试,脑瘫数据

T1我们机房都不会然后打了一个DFS草草了事,但是成绩出来,我吓一跳

T1都是六七十,都是和我一样的打的暴力,但是我30,我一开始觉得是我的代码没优化,结果发现都没优化,但是我的代码是30,其他人是64(快读70),

两个代码如下:(猜猜哪个代码是30分的)

#include<bits/stdc++.h>
#define int long long
#define N 200010
using namespace std;
const int P=1e9+7;
int n,m,sd[N][2],ans,vis[N];
void dfs(int x)
{
	if(x==n+1)
	{
	    ans=(ans+1)%P;
		return ;
	}
	if(!vis[sd[x][0]])
	{
		vis[sd[x][0]]=1;
		dfs(x+1);
		vis[sd[x][0]]=0;
	}
	if(sd[x][0]==sd[x][1])
	  return ;
	if(!vis[sd[x][1]])
	{
		vis[sd[x][1]]=1;
		dfs(x+1);
		vis[sd[x][1]]=0;
	}
	return ;
}
signed main()
{
	scanf("%lld%lld",&n,&m);

	for(int i=1;i<=n;i++)
	{
		int a,b;
		scanf("%lld%lld",&a,&b);
		sd[i][0]=a;
		sd[i][1]=b;
	}
	dfs(1);
	cout<<ans%P<<endl;
	return 0;
}

#include<bits/stdc++.h>
//	#define int long long
#define max(A,B) (A<B?B:A)
#define min(A,B) (A>B?B:A)
#define bug cout<<"I AK IOI"<<endl;
using namespace std;
const int N=201,mod=1e9+7;

int n,m,w[201][3],ans,vis[N]; 

void dfs(int x){
	if(x==0){
		ans++;ans%=mod;
		return ;
	}
	if(!vis[w[x][1]]) vis[w[x][1]]=1,dfs(x-1),vis[w[x][1]]=0;
	if(w[x][1]==w[x][2]) 
	return ;
	if(!vis[w[x][2]]) vis[w[x][2]]=1,dfs(x-1),vis[w[x][2]]=0;
}

signed main(){
	scanf("%d%d",&n,&m);
	if(n>200){
		cout<<0;
		return 0;
	}
	for(int i=1;i<=n;i++)
	scanf("%d%d",&w[i][1],&w[i][2]) ;
	dfs(n);
	cout<<ans%mod;
	return 0;
}

两个都是很简短的DFS,但是分数天差地别

原题在这,两个代码交上去就知道哪个高那个低了

后来我才知道,原来从n到1和从1到n分数是不一样的,1-n快,n-1慢,但是我觉得时间复杂度是一样的

所以是因为数据还是因为时间复杂度就是慢?

2022/9/24 20:54
加载中...