zoukankan      html  css  js  c++  java
  • zoj 2705 Dividing a Chocolate 斐波那契数列应用 (8-B)

    题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1705

    题解:  1 首先看到题目想起那个两个盒子之间把求放来放去,每次大的那边减去和小的那边一样数目的球,问能不能让所有球在一个盒子中去。   有点类似,但是这个题总数在减 少,而且这里存在最佳情况。 

                  2 分析这个题要逆向思考,首先我们选择分某一边后,剩下那一边就完全没有用了,举案例这个例子。6*5 -> (6*3+6*2)-> (6*1+6*2)->(6*1+6*1)  每次分别吃掉6*2,6*1,   最后把相等的6*1吃掉,可以看到这里6并没有用, 定下来分5这条边以后6就没有他的事了。 然后看每组较大的数恰好是fibonacci数列, 假设最后变成m*b (我们分 n这条边) 那么一定有n=f(k)*b;  反之只要某一条边可以写成这样的形式,一定可以这样分下去。  然后吃掉的面积就是m*n-剩下的面积m*n/f(k). 只要找到尽量大的  f(k)就好了   ,再把f(k)整除m也行考虑进来就行了。  

                  3 10^9以内fibonacci只有44个哦

    代码:

    #include<iostream>
    #include<vector>
    using namespace std;
    #define inf 1000000000
    
    int main()
    {
      vector<int>   v;
      v.push_back(1);
      v.push_back(1);
      for(int i=2;;i++)
      {
         int temp=v[i-1]+v[i-2];
    
         if(temp>inf)  break;
         else v.push_back(temp);
      }
    
    
      long long m,n;
    
      while(cin>>m>>n)
      {
        int index=0;
        for(int i=43;i>=0;i--)
         {
            if(m%v[i]==0||n%v[i]==0)
            {
               index=i;
               break;
    
            }
         }
    
          cout<<m*n-m*n/v[index]<<endl;
          cout<<endl;
    
      }
    
    
    }
    






  • 相关阅读:
    转:Mac下搭建svn服务器和XCode配置svn
    坑爹的高德地图API
    Mac下搭建svn服务器和XCode配置svn
    手风琴效果
    模仿淘宝吸顶条(定时器)
    模仿手机发送短信
    上下移动-欢迎拍砖
    中国的数字图书馆
    响应式布局这件小事
    JS学习笔记
  • 原文地址:https://www.cnblogs.com/814jingqi/p/3247190.html
Copyright © 2011-2022 走看看