代码如下:
#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能优化吗?