Triangle(长春 重现赛(斐波拉契数列))

来源:互联网 发布:联想服务器数据恢复 编辑:程序博客网 时间:2024/05/16 09:52

Question:题目详情(http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=728)
题目大意:有1~n的数,问你至少拿掉几个数才能使剩下的数不能组成三角形
解题思路:三角形两边之和大于第三边,按照这个规则,找到第二第三大的两边等于第一大的边,这样数列中就不可能组成三角形了(1,2,3,5,8,13。。。),在斐波拉契数列中你再也不能加入一个数(加入后就不满足了),所以斐波拉契数列是最优解,本题数据较小,只有20所以就直接把跟数据相关的斐波拉契数列写出来了

#include <iostream>#include <cstdio>using namespace std;int a[20],ncase;int main(){    int T,n;    cin>>T;    a[1]=a[2]=a[3]=a[5]=a[8]=a[13]=1;    while(T--)    {        int sum=0;        cin>>n;        for(int i=1;i<=n;i++)            if(a[i]==0)               sum++;        cout<<"Case #"<<++ncase<<": "<<sum<<endl;    }    return 0;}

体会:只要想到了斐波拉契数列,这题就变得非常简单

0 0
原创粉丝点击