Greedy:三角形问题
题目大意:有n根长度的为a1,a2....an的棒子,如果棒子可以组成三角形,求这些棒子能组成的三角形的最大周长?
这一题,一般人只能想到三重循环,当然我们是CS专业的,不能这样想,其实这题可以用DP(其实也不算DP),就是用o(n^2)的时间算出所有两根棒子的组合,然后再n的时间从大到小匹配
其实这一题有更简单的O(nlogn)的算法,那就是,既然我们都要选周长最大的三角形,那为什么我们不能从最大的棒子开始匹配呢?这样一想,其实DP也是在做这样的事情,从最大的开始做起,那么以为棒子的输入是随机的,我们就快排一次,然后从n-2开始往下匹配,完成任务
这一题真的是很简单,但是我一开始的时候还是没有想到,看来我还是需要很多锻炼
#include <stdio.h>
#include <stdlib.h>
#define CUTOFF 20 typedef int Position;
void Quick_Sort(Position, Position, Position *);
void Swap(Position, Position,Position *);
int Median_of_Three(Position, Position, Position,Position *);
void Insertion_Sort(Position, Position, Position *);
void Search(Position *, const int); int main(void)
{
int n, i;
while (~scanf("%d", &n))
{
if (n == )
break;
Position *A = (Position *)malloc(sizeof(Position)*n);
for (i = ; i < n; i++)
scanf("%d", &A[i]);
Quick_Sort(, n - , A);
Search(A, n);
free(A);
}
return ;
} void Swap(Position x, Position y, Position *A)
{
A[x] ^= A[y];
A[y] ^= A[x];
A[x] ^= A[y];
} int Median_of_Three(Position left, Position mid , Position right,Position *A)
{
if (A[left] > A[mid])
Swap(left, mid, A);
if (A[left] > A[right])
Swap(left, right, A);
if (A[mid] > A[right])
Swap(mid, right, A);
Swap(mid, right, A);
return A[right];
} void Insertion_Sort(Position left, Position right, Position *A)
{
int i, j, tmp;
for (i = left + ; i <= right; i++)
{
tmp = A[i];
for (j = i; j > left && A[j - ] > tmp; j--)
A[j] = A[j - ];
A[j] = tmp;
}
} void Quick_Sort(Position left, Position right, Position *A)
{
Position mid = (left + right) / ;
int i = left, j = right, pivot;
if (right - left > CUTOFF)
{
pivot = Median_of_Three(left, mid, right, A);
while (i < j)
{
while (A[++i] < pivot);
while (A[--j] > pivot);
if (i < j)
Swap(i, j, A);
else break;
}
Swap(i, right, A);
Quick_Sort(left, i - , A);
Quick_Sort(i + , right, A);
}
else
Insertion_Sort(left, right, A);
} void Search(Position *A, const int n)
{
int found = , i;
for (i = n - ; i >= ; i--)
{
if (A[i] < A[i - ] + A[i - ])
{
printf("%d\n", A[i] + A[i - ] + A[i - ]);
found = ;
break;
}
}
if (!found)
printf("0\n");
}
Greedy:三角形问题的更多相关文章
- HDU 4380 Farmer Greedy(叉积和三角形知识的综合应用)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=115760#problem/A 题目意思大致为由n个点(n小于100)和m个金矿 ...
- hdu 4353 统计点在三角形内的个数
Finding Mine Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- canvas快速绘制圆形、三角形、矩形、多边形
想看前面整理的canvas常用API的同学可以点下面: canvas学习之API整理笔记(一) canvas学习之API整理笔记(二) 本系列文章涉及的所有代码都将上传至:项目代码github地址,喜 ...
- Android快乐贪吃蛇游戏实战项目开发教程-05虚拟方向键(四)四个三角形按钮
该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.如何判断点击的是哪个方向键按钮 在上篇教程中我们实现了左边的三角形按钮效果, ...
- Android快乐贪吃蛇游戏实战项目开发教程-04虚拟方向键(三)三角形按钮效果
该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.知识点讲解 当我们点击系统自带的按钮时,按钮的外观会发生变化.上篇博文中我们 ...
- Android快乐贪吃蛇游戏实战项目开发教程-03虚拟方向键(二)绘制一个三角形
该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.绘制三角形 在上一篇文章中,我们已经新建了虚拟方向键的自定义控件Direct ...
- 酷酷的CSS3三角形运用
概述 在早期的前端Web设计开发年代,完成一些页面元素时,我们必须要有专业的PS美工爸爸,由PS美工爸爸来切图,做一些圆角.阴影.锯齿或者一些小图标. 在CSS3出现后,借助一些具有魔力的CSS3属性 ...
- CSS制作三角形和按钮
CSS制作三角形和按钮 用上一篇博文中关于边框样式的知识点,能制作出三角形和按钮. 我先说如何制作三角形吧,相信大家在平时逛网站的时候都会看到一些导航栏中的三角形吧,比如说: 网易首页的头部菜单栏中, ...
- Effective前端3:用CSS画一个三角形
p { text-indent: 2em } .triangle-container p { text-indent: 0 } img { margin: 15px 0 } 三角形的场景很常见,打开一 ...
随机推荐
- linux 问答
问:1 如何查看当前的Linux服务器的运行级别? 答: ‘who -r’ 和 ‘runlevel’ 命令可以用来查看当前的Linux服务器的运行级别. 问:2 如何查看Linux的默认网关? 答: ...
- NOI题库-小学奥赛QwQ
今天Loli教育我们让我们来看看NOI题库的奥赛部分,不过,为何是小学的( ⊙ o ⊙ )啊!感觉智商被各种侮辱. 余数相同问题: 描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为 ...
- Spring POST
Spring POST+表单对象如果数据格式不正确,则页面直接报400.页面没有反应,烦啊
- BZOJ2535 [Noi2010]Plane 航空管制2
Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小X表示很不满意. 在这次来烟台的路上 ...
- POJ1141 Brackets Sequence
Description Let us define a regular brackets sequence in the following way: 1. Empty sequence is a r ...
- 洛谷P1262 间谍网络
本来只想刷道小题,没想到还有点麻烦 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美 ...
- 中间件、MetaQ入门学习
目录 . 中间件技术 . MetaQ中间件 . MetaQ编程实践 1. 中间件技术 0x1: 中间件简介 中间件(Middleware)是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的 ...
- linux磁盘空间清理
由于当初安装系统设计不合理,有些分区的过小,以及网络通讯故障等造成日志文件速度增长等其他原因都可以表现为磁盘空间满,造成无法读写磁盘,应用程序无法执行等.下面就给你支几招(以/home空间满为例): ...
- Eclipse下搭建Hadoop2.4.0开发环境
一.安装Eclipse 下载Eclipse,解压安装,例如安装到/usr/local,即/usr/local/eclipse 4.3.1版本下载地址:http://pan.baidu.com/s/1e ...
- javascript检验工具的比较
作者是 Jani Hartikainen,英文好的同学直接阅读原文. 原文 当写js代码的时候,一个校验工具可以帮助我避免愚蠢的错误.尽管我有许多年的经验,但是我仍然有变量命名不正确.产生语法错误以及 ...