您的位置:首页 > 其它

HDU 5135 Little Zu Chongzhi's Triangles(简单水题)

2015-10-12 22:46 375 查看

题目链接:

戳我

题目大意:

给一堆 木棍,用这些木棍组成三角形,要组成的所有的三角形的面积和最大,不一定要用完所有的木棍。

样例解释:

3   //三个棍子

1 1 20 // 每个棍子的长度,自然,这三个棍子不可能组成三角形,故输出 0.00

7 // 7个棍子

3 4 5 3 4 5 90 // 组成两个三角形(3, 3 4)和(4, 4, 5),面积和即为13.64

0 // 输出 0 退出

解题思路:

本来不想写题解的,因为太水了,,,,,,,

可是看到 谷歌搜出来的 都是用动态规划,啊啊啊啊啊啊,一道水题,用得着动态规划吗,杀鸡用牛刀啊(其实我不太懂动态规划 |||||||)

直接排序, 尽量 大和大的结合,不能结合就依次向下找

代码:

//Author LJH
//www.cnblogs.com/tenlee
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#define clc(a, b) memset(a, b, sizeof(a))
#define LL long long
using namespace std;

const int inf = 0x3f;
const int INF = 0x3f3f3f3f;
const int maxn = 20;
const double eps = 1e-6;

int n, ha[maxn];
double ver[maxn];

inline double getArea(double a, double b, double c)
{
//printf("a = %.0lf, b = %.0lf, c = %.0lf\n", a, b, c);
double p = (a + b + c) / 2.0;
double area = sqrt(p * (p - a) * (p - b) * (p - c));//海伦公式,求三角形面积
return area;
}
bool cmp(double a, double b)
{
return a > b;
}

int main()
{
while(~scanf("%d", &n) && n)
{
clc(ha, 0);
for(int i = 1; i <= n; i++)
{
scanf("%lf", &ver[i]);
}
sort(ver+1, ver+n+1, cmp);
/*for(int i = 1; i <= n; i++)
printf("%.0lf\n", ver[i]);*/
int j = 2, k = 1;
double sum = 0;
/////////解决思路
while(j <= n)
{
if(ver[j] - ver[j-1]/2 > eps)
{
k++;
}
else
{
k = 1;
}
if(k == 3)
{
k = 0;
sum += getArea(ver[j], ver[j-1], ver[j-2]);
}
j++;
}
printf("%.2lf\n", sum);
}
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: