HDU 4734 F(x) (数位DP,基础)
2015-10-05 10:54
309 查看
题意:
一个非负整数的十进制位是这样的 (AnAn-1An-2 ... A2A1),定义F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1。给出A和B,问[0,B]中有几个整数x的F(x)值<=F(A)?
思路:
算一下就知道F(x)值不会超过512*9,而B仅仅有8位十进制数,那么8*512*9就可以算出所有的统计了。对于每个询问,先计算F(A)的值,然后统计小于此值有几个就行了。统计的复杂度也是很低的。若是以前缀和来统计后面的个数的话,要么TLE,要么WA。
AC代码
一个非负整数的十进制位是这样的 (AnAn-1An-2 ... A2A1),定义F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1。给出A和B,问[0,B]中有几个整数x的F(x)值<=F(A)?
思路:
算一下就知道F(x)值不会超过512*9,而B仅仅有8位十进制数,那么8*512*9就可以算出所有的统计了。对于每个询问,先计算F(A)的值,然后统计小于此值有几个就行了。统计的复杂度也是很低的。若是以前缀和来统计后面的个数的话,要么TLE,要么WA。
#include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <map> #include <algorithm> #include <vector> #include <iostream> #define pii pair<int,int> #define INF 0x7f3f3f3f #define LL long long #define ULL unsigned long long using namespace std; const double PI = acos(-1.0); const int N=10; int f [5120], bit , limit; //[第几位][上界] int dfs(int i,int sum,bool e) { if(i==0) return sum>=0; if(sum<0) return 0; if(!e && ~f[i][sum] ) return f[i][sum]; int ans=0; int u= e? bit[i]: 9; for(int d=0; d<=u; d++) ans+=dfs(i-1, sum-d*(1<<i-1), e&&d==u); return e? ans: f[i][sum]=ans; } int cal(int n) { if(n<0) return 0; if(n==0) return 1; int len=0; while(n) //拆数 { bit[++len]=n%10; n/=10; } return dfs(len, limit, true); } void pre_cal(int n) { int len=0; while(n) //拆数 { bit[++len]=n%10; n/=10; } limit=0; for(int i=1; i<=len; i++) limit+=bit[i]*(1<<i-1); } int main() { //freopen("input.txt","r",stdin); memset(f, -1, sizeof(f)); int t, n, Case=0; cin>>t; while( t-- ) { scanf("%d%d",&limit,&n); pre_cal(limit); printf("Case #%d: %d\n", ++Case, cal(n)); } return 0; }
AC代码
相关文章推荐
- mount阶段并不会做数据文件的存在性判断
- 又见PV操作
- Swift Mailer ——Comprehensive mailing tools for PHP
- Target runtime Apache Tomcat v6.0 is not defined
- GCC学习笔记
- Android 判断屏幕滑动
- libprotobuff8.so not found
- 双端队列(deque)的应用
- onchange第二次点击失效的解决办法
- php利用curl*multi*函数实现异步请求
- 多线程之间的同步控制
- 多线程之间的同步控制
- Matlab-vision包学习-Feature Detection,Extraction and Matching-显示匹配结果的函数
- 集合hashCode()方法和equals()办法
- 面试复习(C++)之直接选择排序
- zd394071264的专栏,有很多很好很相近的东西
- Mapreduce初级案例
- java反射与函数回调(一)
- javascript之对象(二)&& 继承问题
- Bing词典案例分析