# 题目大意

对于一个数 $x$,它的每一位数字分别是 $A_{n}A_{n-1}A_{n-2}\cdots A_{2}A_{1}$,定义其权重 $f(x)=\sum_{i=1}^{n}\left(A_i\times 2^{i-1}\right)$。

现在给定两个数 $A,B$ 求出 $[0,B]$ 中满足 $f(i)\le f(A)$ 的数的个数。

# 解题思路

数位 $\text{DP}$。

我一开始设的状态是 $dp[i][j]$ 表示到第 $i$ 位,并且现在已经枚举到的数位的权重是 $j$,写完之后发现会 $\text{TLE}$,因为相对与每组数据来说它们的 $A$ 不是一样的,按上面的状态设计方程会导致记忆化下来的答案并不是通用的,需要每次都 $memset$ $dp$ 数组。

然后考虑另一种状态,另第一维的意义不变,将第二维变成剩余的可用权值(大体就是那么个意思),然后做记忆化。

# 附上代码

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int a, b, pow[], T, dp[][], cnt, num[], fa;
inline void init() {
pow[] = ;
for(int i=; i<=; i++) pow[i] = pow[i-] * ;
}
inline int dfs(int l, int f, bool limit) {
if(dp[l][f] && !limit) return dp[l][f];
if(l == ) return f >= ;
int ans = , mx = limit ? num[l] : ;
for(int i=; i<=mx; i++) {
if(f - i * pow[l-] < ) continue;
ans += dfs(l-, f-i*pow[l-], limit && i==mx);
}
return (!limit) ? dp[l][f]=ans : ans;
}
inline int solve(int x) {
int k = ;
while (x) {
num[++k] = x % ;
x /= ;
}
return dfs(k, fa, true);
}
inline void fff(int x) {
fa = ;
int k = ;
while (x) {
fa += pow[k] * (x % );
k ++;
x /= ;
}
}
int main() {
init();
scanf("%d", &T);
while (T--) {
scanf("%d%d", &a, &b);
fff(a);
printf("Case #%d: %d\n", ++cnt, solve(b));
}
}

最新文章

  1. C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)
  2. vim(vi)常用操作及记忆方法
  3. IT人可以关注的站
  4. springmvc--json--返回json的日期格式问题
  5. thinkphp model层外挪,以便多个站点可以通用
  6. 1029c语言文法定义与c程序的推导过程
  7. FastDFS4 + Ubuntu12安装及部署
  8. linux之Gcc使用
  9. 【HDOJ】1448 The Treasure
  10. javaScript 要点(十五)HTML DOM 导航
  11. req.xhr在express中的应用
  12. GIT的下载、安装、与使用
  13. redis 一般性使用概述
  14. oracle11g安装教程(注意事项及图文教程)
  15. Python/MySQL(四、MySQL数据库操作)
  16. [Swift]LeetCode920. 播放列表的数量 | Number of Music Playlists
  17. Broadcast发送广播
  18. java学习之成员内部类
  19. FastReport 套打全攻略
  20. C# 反射(Reflection)

热门文章

  1. UI:sqlite数据库
  2. CentOS 7安装并设置启动图形桌面
  3. 记一次线上环境的内存溢出(java.lang.OutOfMemoryError)
  4. git修改push的注释信息
  5. Android Dialogs(2)最好用DialogFragment创建Dialog
  6. Eclipse快捷键集合
  7. Java编码格式
  8. C. Timofey and a tree 观察题 + dfs模拟
  9. Eclipse打包多渠道包(库工程版)
  10. addslashes,stripslashes