http://acm.hdu.edu.cn/showproblem.php?pid=4734

一般数位dp表示的是数的性质,这个题目也是一样,但是我们求出来的是一个函数的值,怎么把这个值转化成一类数,然后再用dp数字来表示这个数的性质呢?

这个我觉得挺麻烦的,很自然发现了这个f[x]并不是很大,最大应该就是10000左右,所以就可以放入数组里面表示

所以就有dp[pos][sum] 但是呢,这个是有问题的,因为如果你用sum来表示前缀和,那就无法进行记忆化,这个dp数组就会出现问题。

然后我就懵了,然后没忍住又去看了一下题解,题解说后面的那维不存前缀和sum,而是存ex-sum 表示前面以及有了sum后面还需要ex-sum这个的数的个数

然后这个就是对的了,至于为什么,你可以理解为我要求一类数,这类数有pos位,然后后面这类数的f(x)必须小于等于sum,这就是一种数的性质。

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <vector>
#include <iostream>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn = 1e5 + ;
typedef long long ll;
int a[]; int f(int x)
{
int pos = ;
int ans = ;
while(x)
{
ans += (x % )*( << pos);
x /= ;
pos++;
}
return ans;
} int ex;
int dp[][]; int dfs(int pos,int sum,bool limit)
{
if (pos == -) return sum <= ex;
if (sum > ex) return ;
if (!limit&&dp[pos][ex-sum] != -) return dp[pos][ex-sum];
int up = limit ? a[pos] : ;
int ans = ;
for(int i=;i<=up;i++)
{
ans += dfs(pos - , sum + i * (<<pos), limit && (i == up));
}
if (!limit) dp[pos][ex-sum] = ans;
return ans;
} ll solve(ll x)
{
int pos = ;
while(x)
{
a[pos++] = x % ;
x /= ;
}
return dfs(pos - , , );
} int main()
{
int t;
scanf("%d", &t);
memset(dp, -, sizeof(dp));
for(int cas=;cas<=t;cas++)
{
int x, y;
scanf("%d%d", &x, &y);
ex = f(x);
int ans = solve(y);
printf("Case #%d: %d\n",cas, ans);
}
return ;
}

数位dp

最新文章

  1. Winscp开源的SSH|SFTP
  2. 选择本地照片之后即显示在Img中(客户体验)
  3. 【jquery】字符ascii码转换函数
  4. Jenkins问题汇总
  5. PostgreSQL与RPM
  6. 实现sqrt()函数
  7. 一款仿36氪iOS版APP源码
  8. HDOJ/HDU 2537 8球胜负(水题.简单的判断)
  9. jquery第二期:三个例子带你走进jquery
  10. Coursera Machine Leaning 课程总结
  11. arcgis地图服务之 identify 服务
  12. CODING 敏捷实践完全指南
  13. Vue.js-06:第六章 - 按键修饰符的使用
  14. Python openpyxl : Excel 文档简单操作
  15. linux基础之sed
  16. 基于QProbe创建基本Android图像处理框架
  17. 大数据开发实战:HDFS和MapReduce优缺点分析
  18. event store
  19. typescript数据类型
  20. js交互

热门文章

  1. vueThink框架搭建与填坑(new)
  2. 自己模拟的ftl 用法:
  3. 视频图文教学 - 用最快的速度把 DotNet Core Blazor 程序安装到 树莓派中 并且用网页控制 GPIO 闪灯
  4. qad progress数据库启动出错解决
  5. Nikto使用方法
  6. JVM 调优之 Eclipse 启动调优实战
  7. Ajax 简述与基础语法
  8. 这届网友实在是太有才了!用python爬取15万条《我是余欢水》弹幕
  9. stand up meeting 1-6
  10. Jmeter发送jdbc请求进行大批量造数