hdu 5914 Triangle 2016中国大学生程序设计竞赛(长春)(脑洞题)

来源:互联网 发布:nba体测数据查询 编辑:程序博客网 时间:2024/05/18 11:14

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5914

题意:
给你n根棍,长度分别为1~n,至少删掉几根棍使得剩下的棍子里任意三根拼不成三角形?

分析:
初中时老师大大已经教过我们,三根棍,哦不,三个数能组成三角形的充要条件是最小的两边之和大于第三边。
啊啊啊,那怎么用到这道题里呢?既然任意三个数拼不成三角形,还要尽可能多的数,那就考虑下临界情况,也就是最小的两边之和等于第三边,等等。前面两个数之和等于第三个数,这是什么鬼?
没错,Fibonacci数列√

那么简单了,把不是斐波那契数的棍子都删了即可。

//source:2016中国大学生程序设计竞赛(长春)#include <bits/stdc++.h>using namespace std;typedef long long ll;int t,n;int fib[8]={1,1,2,3,5,8,13,21};int solve() {    int i=0;    while(fib[i]<=n)        i++;    return n-i+1;}int main() {    scanf("%d",&t);    for(int i=1;i<=t;i++) {        scanf("%d",&n);        printf("Case #%d: %d\n", i,solve());    }}
0 0