我解决了全re,但我全tle了(
查看原帖
我解决了全re,但我全tle了(
815833
CrisisLily9654楼主2024/1/6 15:35

代码如下:

#include<iostream>
#include<algorithm>
using namespace std;

long long n,tot;
long long sti[100010];
bool vis[100010];
long long tri[5];
long long const int big=10000000007;

int youmu(int k){
	for(int i=k;i<=n;i++){
		if(vis[i]==false){
			tri[k]=sti[i];
			vis[i]=true;
			sort(tri,tri+k);
			//测试代码头
//			for(int j=1;j<=k;j++){
//				cout<<tri[j]<<' ';
//			}
//			cout<<"\n";
			//测试代码尾
			if(k==4&&tri[1]+tri[2]==tri[3]&&tri[1]+tri[2]==tri[4]){
				tot++;
//				add[k]=tri[4];
//				cout<<"yeah\n";	//测试用
			}
			else{
				youmu(k+1);
			}
			vis[i]=false;
		}
	}
	if(k=-1){
		return 0;
	}
}

int main(){
	//输入
	cin>>n;
	for(int i=1;i<=n;i++){
//		cin>>sti[i];
		scanf("&d",&sti[i]);
	}
	if(n<4){
		cout<<0;
		return 0;
	}
	//没有四根木棒的情况
	//memset(vis,false,sizeof(vis));
	youmu(1);
	cout<<tot%big;
	return 0;
}

我乖乖地听老师的话用了dfs搜索回溯,然后我超时了(

但是其他方法我暂时是不想整了所以想问问这个dfs能优化吗?

2024/1/6 15:35
加载中...