题目大意:有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:三角形问题的更多相关文章

  1. HDU 4380 Farmer Greedy(叉积和三角形知识的综合应用)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=115760#problem/A 题目意思大致为由n个点(n小于100)和m个金矿 ...

  2. hdu 4353 统计点在三角形内的个数

    Finding Mine Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  3. canvas快速绘制圆形、三角形、矩形、多边形

    想看前面整理的canvas常用API的同学可以点下面: canvas学习之API整理笔记(一) canvas学习之API整理笔记(二) 本系列文章涉及的所有代码都将上传至:项目代码github地址,喜 ...

  4. Android快乐贪吃蛇游戏实战项目开发教程-05虚拟方向键(四)四个三角形按钮

    该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.如何判断点击的是哪个方向键按钮 在上篇教程中我们实现了左边的三角形按钮效果, ...

  5. Android快乐贪吃蛇游戏实战项目开发教程-04虚拟方向键(三)三角形按钮效果

    该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.知识点讲解 当我们点击系统自带的按钮时,按钮的外观会发生变化.上篇博文中我们 ...

  6. Android快乐贪吃蛇游戏实战项目开发教程-03虚拟方向键(二)绘制一个三角形

    该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.绘制三角形 在上一篇文章中,我们已经新建了虚拟方向键的自定义控件Direct ...

  7. 酷酷的CSS3三角形运用

    概述 在早期的前端Web设计开发年代,完成一些页面元素时,我们必须要有专业的PS美工爸爸,由PS美工爸爸来切图,做一些圆角.阴影.锯齿或者一些小图标. 在CSS3出现后,借助一些具有魔力的CSS3属性 ...

  8. CSS制作三角形和按钮

    CSS制作三角形和按钮 用上一篇博文中关于边框样式的知识点,能制作出三角形和按钮. 我先说如何制作三角形吧,相信大家在平时逛网站的时候都会看到一些导航栏中的三角形吧,比如说: 网易首页的头部菜单栏中, ...

  9. Effective前端3:用CSS画一个三角形

    p { text-indent: 2em } .triangle-container p { text-indent: 0 } img { margin: 15px 0 } 三角形的场景很常见,打开一 ...

随机推荐

  1. 【POJ 1094】拓扑排序

    题意 给出n,代表有以A开始的n个字母,给出它们的m个小于关系(A<B).如果前i个关系可以确定n个字母的一个顺序就输出: Sorted sequence determined after i ...

  2. Codeforces Round #342 (Div 2) 解题报告

    除夕夜之有生之年CF第一场 下午从奶奶家回到姥姥家,一看还有些时间,先吃点水果陪姥姥姥爷聊了会儿,再一看表,5:20....woc已经开场20分钟了...于是抓紧时间乱搞.. **A. Guest F ...

  3. MAC OS下安装Erlang

    这是个很大的问题,也是个很小的问题,恩.因为我最终解决方案是用了别人写的工具,名叫erlbrew: https://github.com/mrallen1/erlbrew 按照页面上的指导安装使用即可 ...

  4. 过滤器在Web开发应用------解决中文乱码

    src/com/Encoding.java package com; import java.io.IOException; import javax.servlet.Filter; import j ...

  5. App接口简介

  6. hdu 1008 Elevator

    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description The hig ...

  7. hdu 1013 Digital Roots

    #include <stdio.h> int main(void) { int m,i;char n[10000]; while(scanf("%s",&n)= ...

  8. 登陆后淡入淡出更换rootViewController

    - (void)restoreRootViewController:(UIViewController *)rootViewController { typedef void (^Animation) ...

  9. Nonove js timer 计时器

    <html> <head> <title> Nonove js timer 计时器 </title> </head> <body> ...

  10. JAVA命令大全

    1.java.exe:======================运行java程序,这个相信每一位用Java的人知道了. 2.javac.exe:======================编译的Ja ...