zoukankan      html  css  js  c++  java
  • Round Numbers

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 int n,m;
     8 int num[40],dp[40][80];       //表示第i个位置,0的个数减去1的个数的差值
     9 
    10 int DFS(int pos,int res,bool ok,bool F){
    11     if(pos==-1) return res>=32;
    12     if(!F&&!ok&&dp[pos][res]!=-1) return dp[pos][res];
    13     
    14     int maxv=F?num[pos]:1;
    15     int ans=0;
    16     for(int i=0;i<=maxv;i++){
    17         if(ok&&i==0) ans=ans+DFS(pos-1,res,ok,F&&i==maxv);
    18         else ans=ans+DFS(pos-1,res+(i==0?1:-1),ok&&i==0,F&&i==maxv);
    19     }
    20     
    21     if(!F&&!ok) dp[pos][res]=ans;
    22     return ans;
    23 }  
    24 
    25 int Solve(int temp){
    26     if(!temp) return 1;
    27     int cnt=0;
    28     while(temp){
    29         num[cnt++]=temp%2;
    30         temp/=2;
    31     }
    32     memset(dp,-1,sizeof(dp));
    33     return DFS(cnt-1,32,true,true);             //为了避免产生负数,所以哈希一下,都加上32
    34 }
    35 
    36 int main()
    37 {    
    38     while(~scanf("%d%d",&n,&m)) cout<<Solve(m)-Solve(n-1)<<endl;
    39     return 0;  
    40 }
  • 相关阅读:
    作业4
    PSP记录个人项目耗时
    代码复审
    是否需要有代码规范?
    作业二(1)
    作业二(2)
    作业一
    软件工程学期总结
    作业4
    作业3(PSP表格)
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/7565646.html
Copyright © 2011-2022 走看看