设为首页 加入收藏

TOP

LightOJ 1032 - Fast Bit Calculations (数位dp)
2015-07-20 17:48:24 来源: 作者: 【 】 浏览:2
Tags:LightOJ 1032 Fast Bit Calculations (数位

?

问0~N内所有数的二进制形式中出现的连续的'11'的个数的和。

?

与LightOJ 1140类似,都是对一个数内一些特征的数目计数,像一个数中'11'或'0'的个数和。

设dp[i][j]表示处理到第i位时'11'出现的次数。

NC的错误,数组开小了,还一直觉得是十进制。。。

?

#include 
  
   
#include 
   
     #include
     #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include 
            
              #include 
             
               #include 
              
                //#define LL __int64 #define LL long long #define eps 1e-12 #define PI acos(-1.0) using namespace std; const int INF = 0x3f3f3f3f; const int maxn = 4010; int dig[40]; LL dp[40][3][40]; //dp[i][j]表示到第i位有j个(1,1)对 LL dfs(int len, int pre, int sta,int up,int first) { if(len == 0) { if(first) return 0; return (LL)sta; } if(!up && !first && dp[len][pre][sta] != -1) return dp[len][pre][sta]; int n = up ? dig[len] : 1; LL res = 0; for(int i = 0; i <= n; i++) { if(first) res += dfs(len-1,i,0,up&&i==n,first&&i==0); else { if(i == 1 && pre == 1) res += dfs(len-1,i,sta+1,up&&i==n,first&&i==0); else res += dfs(len-1,i,sta,up&&i==n,first&&i==0); } } if(!up && !first) dp[len][pre][sta] = res; return res; } LL cal(int num) { int len = 0; while(num) { dig[++len] = num % 2; num /= 2; } return dfs(len,0,0,1,1); } int main() { int num; int test; scanf(%d,&test); for(int item = 1; item <= test; item++) { memset(dp,-1,sizeof(dp)); scanf(%d,&num); printf(Case %d: %lld ,item,cal(num)); } return 0; } 
              
             
            
           
          
         
        
       
      
     
   
  


?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇poj 2352(简单树状数组) 下一篇UVa10803_Thunder Mountain(最短..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何利用Python做数 (2025-12-24 23:48:36)
·如何使用python进行 (2025-12-24 23:48:34)
·python 爬虫入门该怎 (2025-12-24 23:48:31)
·Java 实现多个大文件 (2025-12-24 23:22:00)
·Java多线程编程在工 (2025-12-24 23:21:56)