我甚至在怀疑这题是不是动规了
这里我的办法是先找出四根木棒然后因为是正三角形所以判断1+2是否=3=4,是就计数
代码如下:
#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;
}
youmu是深搜函数
也许可以剪枝,但是总感觉不知道往哪儿剪