• hdu 4602 Partition 快速幂,构造递推关系


    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4602

    解题思路: 1设对n的分解中k出现的次数是 g(n,k) ,首先发现k从n往下举例的时候,前几项都是一样的(待证明)

                          然后只需要知道对n的划分中,一共有多少个数。 考虑将n分成k个数,有C(n-1,k-1)种分发,于是总个数就是sigma k*C(n-1,k-1) ;

                         2 利用kC(n,k)=n C(n-1,k-1)  很容易求和  ,找到了a(n)=sigma...- S(n-1) ;再列举一项相减就可以了。  最后得到a(n)=(2^(n-3)     ) *     (n+2),n>=3;

                         3 输入n,k  将n-k+1带入计算就可以了  ,注意特判n-k<0,==1,   几种情况。

                         4n,k比较大, 记得使用快速幂,还有使用long long保存结果;

    #include<iostream>
    
    using namespace std;
    
    typedef long long inta;
    inta quick_mod(inta a,int b,int m)
    {
       inta ans=1;
       a=a%m;
       while(b>0)
      {
         if(b&1)
         {
            ans=(ans*a)%m;
         }
         b>>=1;
         a=(a*a)%m;
      }
    
      return ans;
    }
    int main()
    {
       int size;
       cin>>size;
       int n,k;
       while(cin>>n>>k)
       {
          int temp=n-k;
     
           if(temp<0)  cout<<0<<endl;
          else if(temp==0)  cout<<1<<endl;
          else if(temp==1)
          {
            cout<<2<<endl;
          }
    //      else if(temp==2)
    //      {
    //         cout<<5<<endl;
    //      }
          else
          {
              inta ans=quick_mod(2,temp-2,1000000007);
              ans=(ans*(temp+3))%1000000007;
    
              cout<<ans<<endl;
    
          }
    
    
       }
    
    }
    


  • 相关阅读:
    Scala学习随笔——控制语句
    Scala学习随笔——深入类和对象
    Scala学习随笔——Scala起步
    HashMap,HashTable,concurrentHashMap,LinkedHashMap 区别
    vector
    LinkedList,HashSet,HashMap
    ArrayList底层实现
    jion()说明
    yiled(),wait(),sleep()方法区别
    synchronized关键字
  • 原文地址:https://www.cnblogs.com/814jingqi/p/3217945.html
Copyright © 2020-2023  润新知