HDU 5135(再思考)

题意略。

思路:再思考后发现,为了构造出最大的三角形面积和,我们应该尽量让长的棍子相组合,这样构造出的三角形面积和最大,贪心能解。

#include<bits/stdc++.h>
using namespace std;

double store[15];
int n;

double cal(double a,double b,double c){
    double p = (a + b + c) / 2;
    return sqrt(p * (p - a) * (p - b) * (p - c));
}
bool judge(double a,double b,double c){
    return (fabs(a - b) < c && c < a + b);
}

int main(){
    while(scanf("%d",&n) == 1 && n){
        for(int i = 0;i < n;++i){
            scanf("%lf",&store[i]);
        }
        sort(store,store + n);
        double ans = 0;
        for(int i = n - 1;i >= 2;){
            double a = store[i],b = store[i - 1],
            c = store[i - 2];
            if(judge(a,b,c)){
                ans += cal(a,b,c);
                i -= 3;
            }
            else{
                --i;
            }
        }
        printf("%.2lf\n",ans);
    }
    return 0;
} 

原文地址:https://www.cnblogs.com/tiberius/p/9165023.html

时间: 2024-10-15 20:18:50

HDU 5135(再思考)的相关文章

hdu 5135 Little Zu Chongzhi&#39;s Triangles 状压DP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5135 从大到小贪心是不对的! 比如 4 30 40 50 89 这组数据 结果应该是600 如果取后三条边只会是一个细长细长的三角形根本没多大面积 只不过因为数据水然后贪心碰巧能过而已 看到网上题解很多人用贪心我好郁闷... 状压DP 看到边的数目很少就应该想到这个了 先枚举可能出现的所有三角形 记录他们使用了那些边还有他们的面积 然后再枚举状态之中 套一层遍历所有三角形的循环 如果当前状态和三角形

[ACM] HDU 5135 Little Zu Chongzhi&#39;s Triangles (一堆木棍组成三角形最大面积)

Little Zu Chongzhi's Triangles Problem Description Zu Chongzhi (429–500) was a prominent Chinese mathematician and astronomer during the Liu Song and Southern Qi Dynasties. Zu calculated the value ofπ to the precision of six decimal places and for a

关于网页脚本代码结构的再思考

在很多说法中,总是建议将我们的javascript脚本加载在网页的最后,并用外部文件的形式,然而事实并不是这样,外挂的文件最好不要太多,脚本结构代码本身才是值得我们思考的问题.我们需要重新思考我们撰写的脚本的执行力,并把更优秀的javascript开发思路融入到我们的开发中. 我在读完了几篇关于javascript和jQuery的性能优化的文章之后,才恍然大悟,我以前所做的很多代码结构优化,最终只是让乌徒帮显得臃肿,于是重新设计脚本代码的结构,无论怎么样,乌徒帮现在的网页打开显得更加流畅了. 1

机房收费重构——关于上下机的再思考

有句话叫做no zuo no die,我大概就是这种人吧.why?做机房收费系统的时候,按照一般方法也能实现,但这次做上下机的时候,总感觉这么做对自己来说,没什么提高,然后就停下来,重新想想上下机还能怎么做? 后来,大致采用的思路是这样的:将上下机的读写数据的过程写成两个存储过程,负责读取和更改数据.中间的计算过程写在代码里面:中间判断时间的过程用职责链模式来实现,判断一般用户还是临时用户用策略模式实现.这样,整个上下机的过程就是这样的: 1,用上机的存储过程使学生上机,然后将学生上机信息写入表

HDU 5135 Little Zu Chongzhi&#39;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 退出 解题思路: 本来不想写题解的,因为太水了,,,,,,, 可是看到 谷歌搜出

[HDU 5135] Little Zu Chongzhi&#39;s Triangles (dfs暴搜)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5135 题目大意:给你n条边,选出若干条边,组成若干个三角形,使得面积和最大.输出最大的面积和. 先将边从小到大排序,这样前面的两条边加起来如果不大于第三条边就可以跳出,这是一个存在性条件. dfs(int idx,int now,int cnt,int nowmax)代表我当前处理的是第idx条边,已经加入边集的有cnt条边,当前的边的长度和为now,组成的最大面积和为nowmax. 暴力枚举每个三

hdu 5135 Little Zu Chongzhi&#39;s Triangles

http://acm.hdu.edu.cn/showproblem.php?pid=5135 题意:给你N个木棍的长度,然后让你组成三角形,问你组成的三角形的和最大是多少? 思路:先求出可以组成的所有的三角形,然后状压dp就可以.求所有的三角形也可以用状压,也可以三重循环求. 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <algorithm> 5 #define

HDU 5135 Little Zu Chongzhi&#39;s Triangles (14广州 状压dp)

Little Zu Chongzhi's Triangles Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Submission(s): 474    Accepted Submission(s): 252 Problem Description Zu Chongzhi (429–500) was a prominent Chinese mathematici

HDU 5135 Little Zu Chongzhi&#39;s Triangles(状态压缩dp+Vector)

这道题是水题,当时直接贪心就过了. 多阶段决策,其实应该用dp,他人的代码使用Vector进行预处理. #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<vector> using namespace std; int n, a[12]; double dp[1<<12]; double cal(int a, int b, i