题目:点击打开链接
题意:给n个木棍,求组成的多个三角形面积和最大为多少?
思路:用贪心的思想,先把木棍从长到短排序,三个进行三角形判定,成立即可以组成三角形则加上该三角形面积,后移三位继续运算,若不成立则去掉第一个也就是当前最大的木棍,后移一位继续运算。
代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
double a[100];
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n==0)
break;
for(int i=0; i<n; i++)
scanf("%lf",&a[i]);
sort(a,a+n);
double maxx=0.0;
for(int i=n-1;i>=2;)
{
double x=a[i],y=a[i-1],z=a[i-2];
if(y+z>x)
{
maxx=maxx+0.5*(x*y*sin(acos((x*x+y*y-z*z)/(2*x*y))));
i=i-3;
}
else
{
i--;
}
}
printf("%.2lf\n",maxx);
}
return 0;
}