题目
题意
有 n 根棍子,求由其中 3 根棍子可以组成三角形的最大周长
思路
- 根据数据范围 n<=100 判断
- 可以使用暴力枚举
- 判断组成三角形的充要条件(两边(较小边)之和大于第三边)
- 维护最大值
坑点
- 无
算法一:暴力枚举
时间复杂度
O ( n 3 ) O(n^3) O(n3)
实现步骤
- 按棍子长度从大到小排序
- 枚举三根不相同的棍子
- 判断是否能组成三角形
- 维护能组成三角形周长的最大值maxn
代码
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N = 2e5+10;
typedef long long ll;
int num[N];
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>num[i];
}
sort(num,num+n);
int maxn=-1;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
for(int k=j+1;k<n;k++)
{
if(num[i]+num[j]>=num[k])
{
maxn=max(maxn,num[i]+num[j]+num[k]);
}
}
}
}
if(maxn==-1)
{
cout<<0<<endl;
}else{
cout<<maxn<<endl;
}
return 0;
}
总结
暴力枚举水题