For a decimal number x with n digits (A nn-1n-2 ... A 21), we define its weight as F(x) = A n * 2 n-1 + A n-1 * 2 n-2 + ... + A 2 * 2 + A 1 * 1. Now you are given two numbers A and B, please calculate how many numbers are there between 0 and B, inclusive, whose weight is no more than F(A).

InputThe first line has a number T (T <= 10000) , indicating the number of test cases. 
For each test case, there are two numbers A and B (0 <= A,B < 10 9)OutputFor every case,you should output "Case #t: " at first, without quotes. The t is the case number starting from 1. Then output the answer.Sample Input

  1. 3
  2. 0 100
  3. 1 10
  4. 5 100

Sample Output

  1. Case #1: 1
  2. Case #2: 2
  3. Case #3: 13

题意:给定了一个数字权值计算公式,问0-b中有多少数字f(x)<f(a);

思路:

dp[pos][num]表示在数位pos之后,f(x)小于等于num的数量

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<vector>
  4. #include<stack>
  5. #include<queue>
  6. #include<map>
  7. #include<set>
  8. #include<cstdio>
  9. #include<cstring>
  10. #include<cmath>
  11. #include<ctime>
  12. #define fuck(x) cout<<#x<<" = "<<x<<endl;
  13. #define ls (t<<1)
  14. #define rs ((t<<1)+1)
  15. using namespace std;
  16. typedef long long ll;
  17. typedef unsigned long long ull;
  18. const int maxn = ;
  19. const int inf = 2.1e9;
  20. const ll Inf = ;
  21. const int mod = ;
  22. const double eps = 1e-;
  23. const double pi = acos(-);
  24. int dp[][];
  25. int dig[];
  26. int fa;
  27. int dfs(int pos,int num,bool limit){
  28. if(num<){ return ;}
  29. if(pos==-){
  30. return num>=;
  31. }
  32. if(!limit&&dp[pos][num]!=-){ return dp[pos][num];}
  33. int up=limit?dig[pos]:;
  34. int ans=;
  35. for(int i=;i<=up;i++){
  36. ans+=dfs(pos-,num-i*(<<pos),limit&&i==up);
  37. }
  38. if(!limit){dp[pos][num]=ans;}
  39. return ans;
  40. }
  41.  
  42. int solve(int x){
  43. int pos=;
  44. while (x){
  45. dig[pos++]=x%;
  46. x/=;
  47. }
  48. return dfs(pos-,fa,true);
  49. }
  50.  
  51. int cal(int x){
  52. int tmp=,ans=;
  53. while (x){
  54. ans+=(x%)*tmp;
  55. x/=;
  56. tmp<<=;
  57. }
  58. return ans;
  59. }
  60. int main()
  61. {
  62. // ios::sync_with_stdio(false);
  63. // freopen("in.txt","r",stdin);
  64. int T;
  65. scanf("%d",&T);
  66. int cases=;
  67. memset(dp,-,sizeof(dp));
  68. while (T--){
  69.  
  70. cases++;
  71. int a,b;
  72. scanf("%d%d",&a,&b);
  73. fa=cal(a);
  74. printf("Case #%d: %d\n",cases,solve(b));
  75. }
  76. return ;
  77. }

HDU - 4734 F(x) (数位dp)的更多相关文章

  1. HDU 4734 F(x) ★(数位DP)

    题意 一个整数 (AnAn-1An-2 ... A2A1), 定义 F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,求[0..B]内有多少 ...

  2. HDU 4734 - F(x) - [数位DP][memset优化]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4734 Time Limit: 1000/500 MS (Java/Others) Memory Lim ...

  3. 【数位DP】 HDU 4734 F(x)

    原题直通车:HDU 4734 F(x) 题意:F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1, 求0.....B中F[x]<=F[A ...

  4. HDU 6156 - Palindrome Function [ 数位DP ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛

    普通的数位DP计算回文串个数 /* HDU 6156 - Palindrome Function [ 数位DP ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛 2-36进制下回文串个数 */ ...

  5. 题解——HDU 4734 F(x) (数位DP)

    这道题还是关于数位DP的板子题 数位DP有一个显著的特征,就是求的东西大概率与输入关系不大,理论上一般都是数的构成规律 然后这题就是算一个\( F(A) \)的公式值,然后求\( \left [ 0 ...

  6. HDU 4734 F(x) (2013成都网络赛,数位DP)

    F(x) Time Limit: 1000/500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  7. hdu 4389 X mod f(x) 数位DP

    思路: 每次枚举数字和也就是取模的f(x),这样方便计算. 其他就是基本的数位Dp了. 代码如下: #include<iostream> #include<stdio.h> # ...

  8. HDU 4734 F(x) 2013 ACM/ICPC 成都网络赛

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4734 数位DP. 用dp[i][j][k] 表示第i位用j时f(x)=k的时候的个数,然后需要预处理下小 ...

  9. hdu 5898 odd-even number 数位DP

    传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...

  10. HDU 5787 K-wolf Number 数位DP

    K-wolf Number Problem Description   Alice thinks an integer x is a K-wolf number, if every K adjacen ...

随机推荐

  1. ubuntu server 16.04 开启root密码登录

    0x00 ubuntu server 16.04 开启root密码登录 由于众多VPS默认使用证书验证登录,虽然安全但使用十分不便,所以特提供开启root用户并使用密码登录方法. 0x01 为root ...

  2. vue echarts map的使用,页面多图动态自适应

    最近在vue中使用echarts时,遇到了一些坑,在此记录一下. 1:echarts map的使用 2:页面多图自适应,只有一个图生效 3:根据设备的dpr,动态的修改了meta标签中的initial ...

  3. 一起学Android之Layout

    本文简述在Android开发中布局的简单应用,属于基础知识,仅供学习分享使用. 概述 在Android UI开发中,布局类型主要有两种:LinearLayout(线性布局)和RelativeLayou ...

  4. jar包 pom

    动态的web工程tomcat 自带jar包: jstl: taglibs-standard-impl-1.2.5.jar taglibs-standard-spec-1.2.5.jar   //以下是 ...

  5. 27号华为笔试(三道ac两道)

    三道题目case:100,100,0: 三个题目: 前两个都全部ac了,第三题没时间: 记录一下大概的思路: 第一题 主要通过Java中的字符串处理函数:然后控制字符串输入格式: 卡bug的点: 1: ...

  6. (二)图数据neo4j基本认识

    1.neo4j介绍 Neo4j是由Java和Scala实现的开源NoSQL图数据库.自2003年开始研发,直到2007年正式发布第一版.Neo4j的源代码托管在GitHub上,技术支持托管在Stack ...

  7. C# 内插字符串与字符串复合格式

    var name = "Tom"; ; string aa = string.Format("name:{0},age:{1}", name, age);//字 ...

  8. SSM —— 注解解析

    @Component是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用. @Controller通过@Controller注解说明该类非 ...

  9. 定义工作,解读自我——IT帮2019年2月线下活动回顾

    本次活动是在北京和深圳两个分站同步进行的,IT团建委员会负责策划和组织,北京站由帮主周老师.王兵老师主导,深圳站由副帮主兼深圳站长陈焕老师主导. 几位老师都是有着丰富的工作经历和人生体验的导师,他们不 ...

  10. [十二省联考2019]D2T2春节十二响

    嘟嘟嘟 这题真没想到这么简单-- 首先有60分大礼:\(O(n ^ 2logn)\)贪心.(我也不知道为啥就是对的) 然后又送15分链:维护两个堆,每次去堆顶的最大值. 这时候得到75分已经很开心了, ...