博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-4734 F(x)数位dp
阅读量:5257 次
发布时间:2019-06-14

本文共 782 字,大约阅读时间需要 2 分钟。

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4734

大致意思就是每次询问【0,b】区间有多少数的f(i) <= f(a)

这题有一个巧妙的状态定义方式:dp[pos][sum]表示枚举到第pos位,【还需要】sum才能达到f(a)

1e9的数据范围,sum不超过5000。最后只要sum >= 0就表示不超过f(a)

状态依旧与输入的a无关:如果a改变了,dfs传入的sum改变,而枚举pos位得到sum是数本身的性质,所以还是在开头memset

1 #include
2 #include
3 #include
4 using namespace std; 5 6 int a[15], dp[15][5000]; 7 8 int f(int k){ 9 int ans = 0, pos = 0;10 while (k){11 ans += (k%10)*(1<
= 0;20 if (sum < 0) return 0;21 if (!lim && dp[pos][sum] != -1) return dp[pos][sum];22 int ans = 0;23 int r = lim ? a[pos] : 9;24 for (int i = 0; i <= r; i++){25 ans += dfs(pos-1, sum - i*(1<

 

转载于:https://www.cnblogs.com/QAQorz/p/9360819.html

你可能感兴趣的文章
命令行标签
查看>>
flask 利用flask_wtf扩展 创建web表单
查看>>
MongoDB官方C#驱动中查询条件Query用法
查看>>
Ubuntu安装mysql和简单使用
查看>>
iOS中将后台JSON数据转化为模型的坑
查看>>
设计模式总结(Java)—— 适配器模式
查看>>
shell脚本(管理守护进程)
查看>>
php 简单的对称加密
查看>>
Investment(完全背包)
查看>>
数组方法
查看>>
ROS Kinetic Install on Debian 9
查看>>
在linux下安装并运行scrapyd
查看>>
[PHP源码阅读]array_pop和array_shift函数
查看>>
宏定义 求结构体变量的偏移量
查看>>
Zend Framework相关
查看>>
迷宫问题
查看>>
英语配音片段
查看>>
[原创]前后端交互的方式整理
查看>>
css简介及常用语法
查看>>
git add 的一点说明
查看>>