zoukankan      html  css  js  c++  java
  • [HDU 4734] F(x)

    dp[dep][rest]表示长度为dep的F(x)<=rest的数的个数

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int dig[15],dp[15][5000];
     4 int dfs(int dep,int rest,int flag){
     5     if(rest<0)return 0;
     6     if(!dep)return 1;
     7     if(!flag&&dp[dep][rest]!=-1)return dp[dep][rest];
     8     int lim=flag?dig[dep]:9;
     9     int ans=0;
    10     for(int i=0;i<=lim;i++)
    11         ans+=dfs(dep-1,rest-i*(1<<(dep-1)),flag&(i==lim));
    12     if(!flag)dp[dep][rest]=ans;
    13     return ans;
    14 }
    15 int solve(int A,int B){
    16     int dd=0;
    17     while(A)dig[++dd]=A%10,A/=10;
    18     for(int i=dd;i;i--)
    19         A=A*2+dig[i];
    20     dd=0;
    21     while(B)dig[++dd]=B%10,B/=10;
    22     return dfs(dd,A,1);
    23 }
    24 int main(){
    25     int T,Case=0;
    26     scanf("%d",&T);
    27     memset(dp,-1,sizeof(dp));
    28     while(T--){
    29         int A,B;
    30         scanf("%d%d",&A,&B);
    31         printf("Case #%d: %d
    ",++Case,solve(A,B));
    32     }
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    os
    linux常用命令
    css-基础知识
    awk命令详解
    文献综述
    微信JSAPI支付
    SNMP详解
    SNMP进阶
    SNMP协议入门
    SNMP简单网络管理协议
  • 原文地址:https://www.cnblogs.com/Ngshily/p/5508352.html
Copyright © 2011-2022 走看看