hdu 4734 F(x)
2015-09-20 14:02
435 查看
F(x)
Time Limit: 1000/500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2781 Accepted Submission(s): 1029
Problem Description
For a decimal number x with n digits (AnAn-1An-2 ... A2A1), we define its weight as F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 *
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).
Input
The 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 < 109)
Output
For 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
3 0 100 1 10 5 100
Sample Output
Case #1: 1 Case #2: 2 Case #3: 13
Source
2013 ACM/ICPC Asia Regional Chengdu Online
数位DP;dp[pos][sum]:当前位数为pos时,最大值为f(a)时,当前位还剩下sum可以用。
#include<stdio.h> #include<string.h> #include<math.h> int dp[11][5120]; int dight[11],num[11]; int a,b,m; int dfs(int pos,int sum,int flag) { if(pos==-1) if(sum>=0)return 1; else return 0; if(sum<0)return 0; if(!flag&&dp[pos][sum]!=-1)return dp[pos][sum]; int i,ans=0,u=flag?dight[pos]:9; for(i=0;i<=u;i++) ans=ans+dfs(pos-1,sum-i*num[pos],flag&&i==u); if(!flag)dp[pos][sum]=ans; return ans; } int fun(int n) { int len=0; while(n) { dight[len++]=n%10; n=n/10; } dfs(len-1,m,1); } int main() { int t,i,x; scanf("%d",&t); for(i=0;i<11;i++) num[i]=pow(2,i); memset(dp,-1,sizeof(dp)); for(i=1;i<=t;i++) {x=1;m=0; scanf("%d %d",&a,&b); while(a) { m=m+a%10*x; x=x*2; a=a/10; } printf("Case #%d: %d\n",i,fun(b)); } return 0; }
相关文章推荐
- 23设计模式之抽象工厂(Abstract Factory)
- 2015Android移动开发应用主流菜单模式
- 基于jQuery Circlr插件实现产品图片360度旋转
- android error while loading shared libraries: libz.so.
- JS学习总结之基础
- WatchOS 2 app 与 Iphone app 数据交互(二)连接状态
- 【wireshark】开发环境搭建
- 花生棒怎样连接使用
- 对git的认识
- PHP对象在内存堆栈中的分配
- 《九九乘法表》
- Ubuntu下配置samba服务器
- PowerDesigner如何将字段的注释显示出来
- java 静态导入
- 在UIButton中如何将imageView和titleView居中且上下分布
- WatchOS 2 app 与 Iphone app 数据交互(一)Connectivity和WCSession
- 黑马程序员---block学习日记
- Ubuntu下安装 Eclipse
- 计算机网络
- Effective C++ —— 定制new和delete(八)