【BZOJ1799】[AHOI2009]同类分布(动态规划)
【BZOJ1799】[AHOI2009]同类分布(动态规划)
题面
题解
很容易想到数位\(dp\),然而数字和整除原数似乎不好记录。没关系,直接枚举数字和就好了,这样子就可以把整除原数的余数直接记下来,然后就很好写了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
ll l,r;int w[20];
ll f[20][200][200][2];
ll Solve(ll a)
{
if(!a)return 0;ll ret=0;int tot=0;
while(a)w[++tot]=a%10,a/=10;
reverse(&w[1],&w[tot+1]);
for(int p=1;p<=tot*9;++p)
{
memset(f,0,sizeof(f));f[0][0][0][0]=1;
for(int i=1;i<=tot;++i)
for(int j=0;j<=p;++j)
for(int k=0;k<p;++k)
for(int l=0;l<=9;++l)
{
if(j+l>p)continue;
f[i][j+l][(k*10+l)%p][1]+=f[i-1][j][k][1];
if(l<w[i])f[i][j+l][(k*10+l)%p][1]+=f[i-1][j][k][0];
if(l==w[i])f[i][j+l][(k*10+l)%p][0]+=f[i-1][j][k][0];
}
ret+=f[tot][p][0][0]+f[tot][p][0][1];
}
return ret;
}
int main()
{
cin>>l>>r;
cout<<Solve(r)-Solve(l-1)<<endl;
return 0;
}
【BZOJ1799】[AHOI2009]同类分布(动态规划)的更多相关文章
- [BZOJ1799][AHOI2009]同类分布(数位DP)
1799: [Ahoi2009]self 同类分布 Time Limit: 50 Sec Memory Limit: 64 MBSubmit: 1635 Solved: 728[Submit][S ...
- 洛谷 P4127 [AHOI2009]同类分布 解题报告
P4127 [AHOI2009]同类分布 题目描述 给出两个数\(a,b\),求出\([a,b]\)中各位数字之和能整除原数的数的个数. 说明 对于所有的数据,\(1 ≤ a ≤ b ≤ 10^{18 ...
- P4127 [AHOI2009]同类分布
P4127 [AHOI2009]同类分布 题解 好的,敲上数位DP DFS板子 记录一下填的各位数字之和 sum ,然后记录一下原数 yuan 最后判断一下 yuan%sum==0 不就好啦??? ...
- BZOJ1799 self 同类分布 数位dp
BZOJ1799self 同类分布 去博客园看该题解 题意 给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数. [约束条件]1 ≤ a ≤ b ≤ 10^18 题解 1.所有的位数之和&l ...
- 【[AHOI2009]同类分布】
这是一篇有些赖皮的题解 (如果不赖皮的话,bzoj上也是能卡过去的) 首先由于我这个非常\(sb\)的方法复杂度高达\(O(171^4)\),所以面对极限的\(1e18\)的数据实在是卡死了 但是这个 ...
- [AHOI2009]同类分布
题目大意: 问在区间[l,r]内的正整数中,有多少数能被其个位数字之和整除. 思路: 数位DP. 极端情况下,每一位都是9,所以各位数字之和不超过9*18.(为了方便这里用了9*19) f[i][j] ...
- 【题解】AHOI2009同类分布
好开心呀~果然只有不看题解做出来的题目才会真正的有一种骄傲与满足吧ヾ(๑╹◡╹)ノ" 实际上这题只要顺藤摸瓜就可以了.首先按照数位dp的套路,有两维想必是省不掉:1.当前dp到到的位数:2. ...
- [luogu4127 AHOI2009] 同类分布 (数位dp)
传送门 Solution 裸数位dp,空间存不下只能枚举数字具体是什么 注意memset最好为-1,不要是0,有很多状态答案为0 Code //By Menteur_Hxy #include < ...
- 洛谷 P4127 [AHOI2009]同类分布
题意简述 求l~r之间各位数字之和能整除原数的数的个数. 题解思路 数位DP 代码 #include <cstdio> #include <cstring> typedef l ...
随机推荐
- js 稍微判断下浏览器 pc 还是手机
function isMobile() { var a=navigator.userAgent; var ref=/.*(Android|iPhone|SymbianOS|iPad| ...
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
- 【SQL】四种排序开窗函数
一 .简单了解什么是开窗函数 什么是开窗函数,开窗函数有什么作用,特征是什么? 所谓开窗函数就是定义一个行为列,简单讲,就是在你查询的结果上,直接多出一列值(可以是聚合值或是排序号),特征就是带有ov ...
- 【SDOI2017】数字表格
题面 题解 这道题目还有一种比较有意思的解法. 定义一种运算\((\mathbf f\oplus\mathbf g)(x) = \prod\limits_{d\mid x}\mathbf f(d)^{ ...
- for...else 小记
for ......: ...... else: ...... 在 for 循环中,若没有执行 break ,正常结束,则会执行 else 中的语句. 若执行了 break , 则 不会 执行 els ...
- 基于bootstrap表单登录(带验证码)
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!-- ...
- linux内核分析程序破解实践报告
- Linux内核分析——Linux内核学习总结
马悦+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核学习总结 一 ...
- 使用github的感想
github的仓库链接:https://github.com/liyan941016/test github是一个基于git的代码托管平台,要想使用github第一步就要注册账户,然后要创建一个仓库 ...
- mybatis批量插入和批量更新
批量插入数据使用的sql语句是: insert into table (aa,bb,cc) values(xx,xx,xx),(oo,oo,oo) mybatis中mapper.xml的代码如下: & ...