不理解之前为什么不会哈哈哈哈哈哈哈哈。

我是个天才(喜


显然记录 \(f_{i, t, r, s, limit, lead}\),\(i, limit, lead\) 是数位 dp 的套路,\(t\) 代表被除数,就是原数,\(r\) 代表余数,\(s\) 代表除数。

我们会发现 \(s\) 直接转移非常难做,而且它很小,最多才 \(9 \times 18 = 162\),直接枚举。

然后我们会发现 \(t\) 非常大怎么办 \(t\) 不重要就是 \(t\) 的各个数位和重要,数位和顶多 162,我们将 \(t\) 改为各个数位和即可。

然后我们就可以把 \(s\) 这一维删掉。

转移显而易见。

开 longlong+O2 即可

//SIXIANG
#include <iostream>
#include <cstring>
#define MAXN 10000
#define ll long long
#define QWQ cout << "QWQ" << endl;
using namespace std;
ll f[20][200][200][2][2];
int tot = 0, arr[MAXN + 10];
int pika(int i, int t, int r, bool limit, bool lead, int qaq) {
if(!i) {
if(!r && t == qaq) return 1;
else return 0;
}
if(f[i][t][r][limit][lead] != -1) return f[i][t][r][limit][lead];
ll rest = 0;
int lim = ((limit) ? (arr[i]) : 9);
for(int p = 0; p <= lim; p++)
rest = (rest + pika(i - 1, t + p, (10 * r + p) % qaq, limit && (p == arr[i]), lead && (!p), qaq));
f[i][t][r][limit][lead] = rest;
return rest;
}
ll solve(int x) {
memset(arr, 0, sizeof(arr));
tot = 0;
do {
arr[++tot] = x % 10;
x /= 10;
} while(x);
ll sum = 0;
for(int p = 1; p <= 9 * tot; p++) {
memset(f, -1, sizeof(f));
sum += pika(tot, 0, 0, 1, 1, p);
}
return sum;
}
signed main() {
int l, r;
cin >> l >> r;
cout << solve(r) - solve(l - 1) << endl;
}

最新文章

  1. asp.net MVC 回顾 Html.ActionLink
  2. Android 的 Handler 总结
  3. 5、Linux下面桌面的安装
  4. android JNI调用(转)
  5. 判断当前是否运行于Design Mode
  6. HDOJ 1284 钱币兑换问题
  7. 知方可补不足~SQL数据库用户的克隆,SQL集群的用户同步问题
  8. ubuntu下openGL的配置方法
  9. JavaScript之arguements对象学习
  10. 数据结构——bitmap
  11. leetcode第一刷_Minimum Path Sum
  12. MPQ Storm库 源代码分析 一个
  13. [译]ASP.NET Core 2.0 布局页面
  14. xamarin android viewpager的用法
  15. IO多路复用,同步,异步,阻塞和非阻塞 区别
  16. netstat -an查看到大量的TIME_WAIT状态的解决办法
  17. 动态令牌验证遇到的问题(判断用户长按backspace键)
  18. [TJOI2018]碱基序列
  19. java-solr solrj的使用
  20. CDATA(不应由XML解析器进行解析的文本数据)、CDATA的使用场景

热门文章

  1. JAVA里Map的一些常用方法
  2. python中文件操作相关基础知识
  3. Python全栈工程师之从网页搭建入门到Flask全栈项目实战(5) - Flask中的ORM使用
  4. SQLMap入门——获取数据库用户的密码
  5. vue引入高德地图
  6. js属性对象的hasOwnProperty( )方法,检测一个属性是否是对象的自有属性
  7. Linux基础第一章 概述
  8. 在windows上构建OpenCascade
  9. ArcGIS工具 - 按线分割面
  10. ES6 中 Promise对象使用学习