挑战程序设计竞赛 1.61 nlogn算法
来源:互联网 发布:华大基因 知乎 编辑:程序博客网 时间:2024/06/05 14:31
问题如下:
OK,这道题非常简单,朴素算法我就不说了,书上也给出了朴素O(n^3)的代码,但是同时也告诉我们还有更高效的算法,我当时琢磨了一下,排序,确定其中两个再用二分查找可以的到一个O(n^2logn)的算法,但是同样不高效。然后,然后.....
我发现这道题居然是一道贪心......
怎么贪呢?
代码如下:
#include<cstdio>#include<algorithm>#include<cstdlib>#include<cmath>#include<cstring>#include<queue>#include<string>#include<map>#include<set>#include<iostream>#include<ostream>#include<istream>#include<vector>#include<functional>#define ll long long;const int inf=0x3f3f3f3f;using namespace std;const int maxn=1005;int edge[maxn];int main(){ int n; cin>>n; for(int i=0;i<n;i++) { scanf("%d",&edge[i]); } sort(edge,edge+n); bool flag=0; for(int i=n-1;i>=2;i--) { if(edge[i]<edge[i-1]+edge[i-2]) { flag=1; cout<<edge[i]+edge[i-1]+edge[i-2]<<endl; break; } } if(!flag)cout<<0<<endl; return 0;}为什么这个算法是正确的呢?我们来证明一下
第一:edge[i],edge[i-1],edge[i-2]能构成三角形,不多说它肯定周长最大;
第二:如果它们不能构成,edge[i]为最大的三角形一定不能找到另外两条使其构成三角形的边,为什么呢?相信你已经清楚了,那就是edge[i-1]+edge[i-2]>其他任意俩边之和。
0 0
- 挑战程序设计竞赛 1.61 nlogn算法
- 《挑战程序设计竞赛》 扩展欧几里得算法 + SPFA
- 最大流算法模板 挑战程序设计竞赛
- 挑战程序设计竞赛——1.61三角形
- 《挑战程序设计竞赛》 读后感
- 挑战程序设计竞赛:三角形
- 《挑战程序设计竞赛》 读后感
- 挑战程序设计竞赛(1)
- 最小生成树---Kruskal算法---挑战程序设计竞赛读书笔记
- 《挑战程序设计竞赛》推荐及算法相关书籍吐槽
- 巫泽俊...《挑战程序设计竞赛》算法及相关书籍论点
- 《挑战程序设计竞赛》2.1 最基础的“穷竭算法“
- 《挑战程序设计竞赛》2.2一直往前!贪心算法
- 初等排序算法总结——《挑战程序设计竞赛》
- 挑战程序设计竞赛 算法和数据结构 第8章 树
- 挑战程序设计竞赛 算法和数据结构 第12章 图
- 挑战程序设计竞赛 算法和数据结构 第18章 数论
- 挑战程序设计竞赛2 数据结构与算法学习笔记
- android中接口回调的理解
- mybatis mapper映射文件异常error parsing Mapper XML java.util.NoSuchElementException
- jequery 遍历table 的某行中的某列
- C和指针读书笔记-第11章(动态内存分配)
- Unix网络编程卷一: 从服务器获取时间信息(三)-daytimetcpcli2客户端每次执行结果不同
- 挑战程序设计竞赛 1.61 nlogn算法
- Mysql存储引擎
- bash: ifconfig: command not found 解决办法
- [BZOJ 1415][NOI 2005]聪聪和可可(SPFA+概率DP)
- Android项目开发,不能不了解的第三方库!(齐全)
- 如何获取显示器的EDID信息
- 读书笔记---arm-linux-objdump命令解析
- Oracle通过DBLink操作数据表,报错“ORA-22992:无法使用从远程表选择的lob定位器”
- Web安全技术(4)-常见的攻击和防御