zoukankan      html  css  js  c++  java
  • HDU 5135 Little Zu Chongzhi's Triangles(简单水题)

    题目链接:

    戳我

    题目大意:

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

    样例解释:

    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
    ", 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
    ", 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
    ", sum);
        }
        return 0;
    }
    

      

  • 相关阅读:
    android中的一个圆角图片
    android中一个评分的控件
    C++ primer(第五版)中需要复习第二遍的知识点记录
    在ubuntu18.04上交叉编译opencv2.4.9
    C6748和音频ADC连接时候的TDM以及I2S格式问题
    C6748的启动方式问题
    AK5703的ALC
    cool edit工具介绍及使用
    CCS编译环境及TI仿真器的使用
    把YUV转化成opencv中的Mat格式的两行代码备份
  • 原文地址:https://www.cnblogs.com/tenlee/p/4873140.html
Copyright © 2011-2022 走看看