UVALive 7077 Little Zu Chongzhi's Triangles (有序序列和三角形的关系)
这个题……我上来就给读错了,我以为最后是一个三角形,一条边可以由多个小棒组成,所以想到了状态压缩各种各样的东西,最后成功了……结果发现样例过不了,三条黑线就在我的脑袋上挂着,改正了以后我发现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 (有序序列和三角形的关系)相关推荐
- URAL 7077 Little Zu Chongzhi's Triangles(14广州I)
题目传送门 题意:有n根木棍,三根可能能够构成三角形,选出最多的三角形,问最大面积 分析:看到这个数据范围应该想到状压DP,这次我想到了.0010101的状态中,1表示第i根木棍选择,0表示没选,每一 ...
- hdu 5135 Little Zu Chongzhi's Triangles(计算几何:三角形面积)
给出多条木棍,问你用这些木棍所能组成的多个三角形面积最大和是多少 贪心做,所以先排序,但是遍历的过程中不能从前向后遍历 因为可能会存在4条边取后三条边是最优的类似情况 正解是从后向前遍历,用海伦公式求 ...
- Python内置模块bisect(二分查找实现和快速插入有序序列)
文章目录 1 概述 2 查找 3 插入 4 补充 1 概述 这是一个免费的二分查找实现和快速插入有序序列的工具.也就是说,你可以使用: import bisect bisect.insort(list ...
- 【详细解析】7-1 两个有序序列的中位数 (25 分)
题目描述 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0,A1,-,An-1的中位数指A(N1)/2的值,即第[(N+1)/2]个数(A0为第1个数). 输入 ...
- 中根遍历二叉查找树所得序列一定是有序序列_二叉搜索树(BST)
点击上方"蓝字",发现更多精彩. 前面我们介绍了树的基本概念,并引出了二叉树.值得注意的是,无特征的二叉树在工程上几乎没啥用处,一般都是使用bst.avl,trie,rbtree等 ...
- 7-53 两个有序序列的中位数 (25 分)(思路加详解)用STL容器中的set容器的自动去重过不去
一:题目 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A 0 ,A 1 ,⋯,A N−1 的中位数指A (N−1)/2 的值,即第⌊(N+1)/ ...
- 有序序列中的i个最大数(算法导论思考题9-1)
有序序列中的i个最大数 (算法导论思考题9-1) a 时间复杂度O(nlgn+i) //总共时间复杂度O(nlgn+i) vector<int> i_largest_number_in_o ...
- 两个序列的中位数c语言,小白在线求教 用归并排序实现查找两个有序序列的中位数...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 两个有序序列的中位数 (20分) 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0,A1,⋯,AN−1的中位数指A ...
- CSDN博客如何在有序序列中缩进代码段或图片
今天没写什么新的内容,主要是调整了博客分类.博客标题格式.博客摘要等内容,一时兴起决定分享一下如何在有序序列中缩进代码段或图片. 先看一看不会缩进代码段的效果: 歪比巴卜 歪比巴卜 歪比歪比 歪比歪比 ...
最新文章
- Go进阶(7): JSON 序列化和反序列化
- mysql数据库更新表_Mysql数据库(四)表记录的更新操作
- Ogitor的编译配置全过程
- vue vue实例中的data与vue组件中的data()
- Mybatis日志实现
- 南阳理工acm24素数距离问题
- 高分三号卫星相关知识
- 张家界和桂林的旅游纪实(避坑指南)
- JavaWeb酒店管理系统
- 谈谈红楼梦(第1-5回)
- 讯飞智能录音笔SR502:支持OCR识别功能的职场礼物
- phantompdf 下载_英雄联盟手游详细下载方法,附中文翻译!
- Easy Excel
- linux三剑客面试题,Linux三剑客之sed
- Java网络编程:TCP,UDP,sock编程
- 中关村发布:大数据企业分布图等3张图
- 设计模式综合-媒体播放器的实现
- 3 链表(LinkedList)
- 星淘惠:沙特阿拉伯或将成为亚马逊跨境卖家新蓝海市场
- python合并视频
热门文章
- 服务器跟域名解析失效,dns根域名解析失败有什么影响
- linux下无对应分辨率,linux mint 向“显示(display)”面板添加没有提供的分辨率选项,使虚拟机中的linux mint可以全屏显示...
- php曲线,PHP生成曲线图的函数
- c语言结构共用体的作用,浅谈C语言共用体和与结构体的区别
- Powerdesigner设置表字段注释与name相同
- Sublime Text3 直接运行js调试控制台
- AcWing基础算法课Level-2 第四讲 数学知识
- ICPC2020小米网络选拔赛第一场复盘
- 【codevs1026】逃跑的拉尔夫
- 如何增加人机数量及平衡_如何识别自己身体类型,针对三种不同身体类型的改变策略...