这个题……我上来就给读错了,我以为最后是一个三角形,一条边可以由多个小棒组成,所以想到了状态压缩各种各样的东西,最后成功了……结果发现样例过不了,三条黑线就在我的脑袋上挂着,改正了以后我发现N非常小,想到了回溯每个棍的分组,最多分5组,结果发现超时了……最大是5^12 =  244,140,625,厉害呢……

  后来想贪心,首先想暴力出所有可能的组合,结果发现替换问题是一个难题……最后T T ,我就断片了。。

  等看了别人的办法以后,我才发现我忽视了三角形的特性,和把数据排序以后的特点。 如果数据从大到小排序为 a,b,c,d,e...会发现这样一个特点,a+b>c,a+c>b,这样一来组合成三角形的唯一条件就是b+c>a,同时也发现是a以后的任意两个数的和都不会大于b+c,所以只要b+c不行,后面的都不可以。如果b+c可以,那么他就是最好的选择,因为后面的任意一对都不可能组合成比a,b,c面积更大的三角形。所以这个题就很清晰了,i只能和i+1和i+2组合为三角形。也可以把这个题归为贪心,也是因为他确实具有贪心的特性,不过更多的是应用有序序列和三角形的关系。

  受这个题的影响,我想起了在2016CCPC长春站做过的一道题,给出一个1-n的序列,求出最少去掉多少个数使其不能构成三角形。这样一来这个序列就是从小到大拍的,a,b,c,d,e,首先b+c>a,a+c>b,所以只要满足a+b>c就可以构成三角形,所以应该尽量避免这样的情况产生,处理方法为,去掉满足这样情况的c,为什么去c,不去a和b呢,因为要把尽量小的数留下来,最后会发现,留下的是1,2,3,5,8...的斐波那契数列。

  代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
#define N 13
int stick[N],n;
bool cmp(int a,int b)
{return a > b;
}
bool ok(int i,int j,int k){return stick[j]+stick[k]>stick[i];
}
double Get_area(int a,int b,int c)
{double p = (a+b+c)/2.0;return sqrt(p*(p-a)*(p-b)*(p-c));
}
int main()
{
//    freopen("I.in.cpp","r",stdin);double ans;while(~scanf("%d",&n)){if(n == 0) break;for(int i = 0; i < n; i++){scanf("%d",&stick[i]);}sort(stick,stick+n,cmp);ans = 0;for(int i = 0; i < n-2; i++){if(ok(i,i+1,i+2)){ans += Get_area(stick[i],stick[i+1],stick[i+2]);i += 2;}}printf("%.2f\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/jifahu/p/5940491.html

UVALive 7077 Little Zu Chongzhi's Triangles (有序序列和三角形的关系)相关推荐

  1. URAL 7077 Little Zu Chongzhi's Triangles(14广州I)

    题目传送门 题意:有n根木棍,三根可能能够构成三角形,选出最多的三角形,问最大面积 分析:看到这个数据范围应该想到状压DP,这次我想到了.0010101的状态中,1表示第i根木棍选择,0表示没选,每一 ...

  2. hdu 5135 Little Zu Chongzhi's Triangles(计算几何:三角形面积)

    给出多条木棍,问你用这些木棍所能组成的多个三角形面积最大和是多少 贪心做,所以先排序,但是遍历的过程中不能从前向后遍历 因为可能会存在4条边取后三条边是最优的类似情况 正解是从后向前遍历,用海伦公式求 ...

  3. Python内置模块bisect(二分查找实现和快速插入有序序列)

    文章目录 1 概述 2 查找 3 插入 4 补充 1 概述 这是一个免费的二分查找实现和快速插入有序序列的工具.也就是说,你可以使用: import bisect bisect.insort(list ...

  4. 【详细解析】7-1 两个有序序列的中位数 (25 分)

    题目描述 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0,A1,-,An-1的中位数指A(N1)/2的值,即第[(N+1)/2]个数(A0为第1个数). 输入 ...

  5. 中根遍历二叉查找树所得序列一定是有序序列_二叉搜索树(BST)

    点击上方"蓝字",发现更多精彩. 前面我们介绍了树的基本概念,并引出了二叉树.值得注意的是,无特征的二叉树在工程上几乎没啥用处,一般都是使用bst.avl,trie,rbtree等 ...

  6. 7-53 两个有序序列的中位数 (25 分)(思路加详解)用STL容器中的set容器的自动去重过不去

    一:题目 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A 0 ​ ,A 1 ​ ,⋯,A N−1 ​ 的中位数指A (N−1)/2 ​ 的值,即第⌊(N+1)/ ...

  7. 有序序列中的i个最大数(算法导论思考题9-1)

    有序序列中的i个最大数 (算法导论思考题9-1) a 时间复杂度O(nlgn+i) //总共时间复杂度O(nlgn+i) vector<int> i_largest_number_in_o ...

  8. 两个序列的中位数c语言,小白在线求教 用归并排序实现查找两个有序序列的中位数...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 两个有序序列的中位数 (20分) 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0,A1,⋯,AN−1的中位数指A ...

  9. CSDN博客如何在有序序列中缩进代码段或图片

    今天没写什么新的内容,主要是调整了博客分类.博客标题格式.博客摘要等内容,一时兴起决定分享一下如何在有序序列中缩进代码段或图片. 先看一看不会缩进代码段的效果: 歪比巴卜 歪比巴卜 歪比歪比 歪比歪比 ...

最新文章

  1. Go进阶(7): JSON 序列化和反序列化
  2. mysql数据库更新表_Mysql数据库(四)表记录的更新操作
  3. Ogitor的编译配置全过程
  4. vue vue实例中的data与vue组件中的data()
  5. Mybatis日志实现
  6. 南阳理工acm24素数距离问题
  7. 高分三号卫星相关知识
  8. 张家界和桂林的旅游纪实(避坑指南)
  9. JavaWeb酒店管理系统
  10. 谈谈红楼梦(第1-5回)
  11. 讯飞智能录音笔SR502:支持OCR识别功能的职场礼物
  12. phantompdf 下载_英雄联盟手游详细下载方法,附中文翻译!
  13. Easy Excel
  14. linux三剑客面试题,Linux三剑客之sed
  15. Java网络编程:TCP,UDP,sock编程
  16. 中关村发布:大数据企业分布图等3张图
  17. 设计模式综合-媒体播放器的实现
  18. 3 链表(LinkedList)
  19. 星淘惠:沙特阿拉伯或将成为亚马逊跨境卖家新蓝海市场
  20. python合并视频

热门文章

  1. 服务器跟域名解析失效,dns根域名解析失败有什么影响
  2. linux下无对应分辨率,linux mint 向“显示(display)”面板添加没有提供的分辨率选项,使虚拟机中的linux mint可以全屏显示...
  3. php曲线,PHP生成曲线图的函数
  4. c语言结构共用体的作用,浅谈C语言共用体和与结构体的区别
  5. Powerdesigner设置表字段注释与name相同
  6. Sublime Text3 直接运行js调试控制台
  7. AcWing基础算法课Level-2 第四讲 数学知识
  8. ICPC2020小米网络选拔赛第一场复盘
  9. 【codevs1026】逃跑的拉尔夫
  10. 如何增加人机数量及平衡_如何识别自己身体类型,针对三种不同身体类型的改变策略...