zoukankan      html  css  js  c++  java
  • POJ3252 Round Numbers(数位dp)

    这里只需先转化乘二进制后,记录前面有几个0和几个1,并且记录前导0状态,因为前导0会影响答案

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    #include<map>
    #include<string>
    #include<vector>
    using namespace std;
    typedef long long ll;
    const int N=1e6+10;
    int l,r;
    vector<int> num;
    int len;
    int f[33][33][33][2][2];
    int dfs(int cur,int p1,int p2,int flag,int g){
        if(cur==len)
        return p1>=p2;
        if(f[cur][p1][p2][flag][g]!=-1)
            return f[cur][p1][p2][flag][g];
        int v=1;
        if(flag)
            v=num[cur];
        int ans=0;
        int i;
        for(i=0;i<=v;i++){
            if(g){
                if(!i)
                    ans+=dfs(cur+1,p1,p2,flag&&(i==v),1);
                else{
                    ans+=dfs(cur+1,p1,p2+1,flag&&(i==v),0);
                }
            }
            else{
                ans+=dfs(cur+1,p1+(i==0),p2+(i==1),flag&&(i==v),0);
            }
        }
        return f[cur][p1][p2][flag][g]=ans;
    }
    int solve(int t){
        num.clear();
        int i;
        memset(f,-1,sizeof f);
        while(t){
            num.push_back(t%2);
            t/=2;
        }
        len=(int)num.size();
        reverse(num.begin(),num.end());
        return dfs(0,0,0,1,1);
    }
    int main(){
        while(cin>>l>>r)
        cout<<solve(r)-solve(l-1)<<endl;
        return 0;
    }
    View Code
    没有人不辛苦,只有人不喊疼
  • 相关阅读:
    python虚拟环境使用
    虚拟化网络进阶管理
    虚拟化进阶管理
    KVM虚拟化
    Xen虚拟化
    Virtualization基础
    Virnish使用
    CentOS配置FTP服务器
    Ajax结合Json进行交互数据(四)
    将 数据库中的结果集转换为json格式(三)
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12728237.html
Copyright © 2011-2022 走看看