SRM 612 D2L3:PowersOfTwo.htm,dp

2014-11-24 11:05:23 · 作者: · 浏览: 1

代码:

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include 
            
              #include 
             
               #include 
              
                #include 
               
                 #include
                 #include 
                 
                   #include 
                  
                    #include 
                   
                     #include 
                    
                      #include 
                     
                       #include 
                      
                        #include 
                       
                         using namespace std; #define CHECKTIME() printf(%.2lf , (double)clock() / CLOCKS_PER_SEC) typedef pair
                        
                          pii; typedef long long llong; typedef pair
                         
                           pll; #define mkp make_pair /*************** Program Begin **********************/ long long dp[65][55]; vector 
                          
                            X(60); class PowersOfTwo { public: long long rec(int k, int b) { long long & res = dp[k][b]; if (res != -1) { return res; } // base case if (k == X.size()) { res = 1; return res; } res = 0; int x_k = X[k] + b; res += rec(k + 1, x_k / 2); if (x_k > 0) { res += rec(k + 1, (x_k - 1) / 2); } return res; } long long count(vector 
                           
                             powers) { long long res = 0LL; memset(dp, -1, sizeof(dp)); for (int i = 0; i < X.size(); i++) { X[i] = std::count(powers.begin(), powers.end(), 1LL << i); } res = rec(0, 0); return res; } }; /************** Program End ************************/