100735D

时间:2023-03-09 18:37:39
100735D

排序+搜索 为什么这是对的呢?其实我不是很清楚 大概是这个样子的:我们希望构成三角形的三个数尽可能集中,因此在搜索中贪心地选取从最小依次往上,选取三条边,但是总感觉有反例,先挖个坑。。。

#include<iostream>
#include<algorithm>
#include<Cstdio>
using namespace std;
int n,ans;
long long x[],a[],used[];
inline bool cp(int x,int y)
{
return x<y;
}
bool dfs(int d,int pos)
{
if(d==)
{
if(x[]+x[]>x[]&&x[]+x[]>x[]&&x[]+x[]>x[])
{
ans++;
return true;
}
return false;
}
for(int i=pos+;i<=n;i++)
{
if(!used[i])
{
used[i]=;
x[d]=a[i];
if(dfs(d+,i))return true;
used[i]=;
x[d]=;
}
}
return false;
}
int main()
{
scanf("%d",&n);
int tot=n;
for(int i=;i<=n;i++)
scanf("%I64d",&a[i]);
sort(a+,a+n+,cp);
while(tot>)
{
if(dfs(,))tot-=;
else break;
}
printf("%d\n",ans);
return ;
}