LightOJ1068 Investigation(数位DP)
这题要求区间有多少个模K且各位数之和模K都等于0的数字。
注意到[1,231]这些数最大的各位数之和不会超过90左右,而如果K大于90那么模K的结果肯定不是0,因此K大于90就没有解。
考虑到数据规模,数据组数,这题状态这么表示:
dp[i][j][k]:位数为i模K结果为j且各位数之和模K结果为k的数字个数
然后就是转移方程,最后就是统计。。
统计部分好棘手。。。半乱搞下AC的。。还是对数位DP的这一部分太不熟悉了。
#include<cstdio>
#include<cstring>
using namespace std;
int K,d[][][],pow[]={};
int calu(int n){
int res=,pre=,sum=;
for(int i=; i>=; --i){
if(i==) for(int j=; j<=n/pow[i]%; ++j) res+=d[i][(K-((pre*+j)*pow[i])%K)%K][(K-(sum+j)%K)%K];
else for(int j=; j<n/pow[i]%; ++j) res+=d[i][(K-((pre*+j)*pow[i])%K)%K][(K-(sum+j)%K)%K];
pre=pre*+n/pow[i]%;
sum+=n/pow[i]%;
}
return res;
}
int main(){
for(int i=; i<; ++i) pow[i]=pow[i-]*;
int t,a,b;
scanf("%d",&t);
for(int cse=; cse<=t; ++cse){
scanf("%d%d%d",&a,&b,&K);
if(K>=){
printf("Case %d: %d\n",cse,);
continue;
}
memset(d,,sizeof(d));
d[][][]=;
for(int i=; i<; ++i) ++d[][i%K][i%K];
for(int len=; len<; ++len){
for(int i=; i<K; ++i){
for(int j=; j<K; ++j){
if(d[len][i][j]==) continue;
for(int k=; k<; ++k) d[len+][(i*+k)%K][(j+k)%K]+=d[len][i][j];
}
}
}
printf("Case %d: %d\n",cse,calu(b)-calu(a-));
}
return ;
}
LightOJ1068 Investigation(数位DP)的更多相关文章
- light oj 1068 - Investigation 数位DP
思路:典型的数位DP!!! dp[i][j][k]:第i位,对mod取余为j,数字和对mod取余为k. 注意:由于32位数字和小于95,所以当k>=95时,结果肯定为0. 这样数组就可以开小点, ...
- LightOJ 1068 Investigation (数位dp)
problem=1068">http://www.lightoj.com/volume_showproblem.php?problem=1068 求出区间[A,B]内能被K整除且各位数 ...
- lightoj 1068 - Investigation(数位dp)
An integer is divisible by 3 if the sum of its digits is also divisible by 3. For example, 3702 is d ...
- 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP
[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...
- bzoj1026数位dp
基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...
- uva12063数位dp
辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...
- HDU2089 不要62[数位DP]
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 数位DP GYM 100827 E Hill Number
题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...
- 数位dp总结
由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...
随机推荐
- 解决ie文本框不能输入和获取焦点问题
解决办法: 从正常的机器上拷贝c:\windows\system32\mshtmled.dll到本机的system32目录下即可.或者从安装盘中提取该文件. 加载mshtmled.dll: ...
- iphone数据存储之-- Core Data的使用(一)
http://www.cnblogs.com/xiaodao/archive/2012/10/08/2715477.html 一.概念 1.Core Data 是数据持久化存储的最佳方式 2.数据最终 ...
- Google Chrome浏览器调试入门————转载只为自己查看方便
Google Chrome浏览器调试 作为Web开发人员,我为什么喜欢Google Chrome浏览器 [原文地址:http://www.cnblogs.com/QLeelulu/archive/20 ...
- Linux tar命令exclude选项排除指定文件或目录
在linux中可以用tar打包目录以方便传输or备份,我们先来看一个例子 test 文件夹有如下文件 [root@lee ~]# ll test 总用量 -rw-r--r--. root root 4 ...
- HDOJ 1596
9899828 2013-12-27 16:42:37 Accepted 1596 3312MS 6668K 711 B C++ 泽泽 floyed暴力 #include<cstdio> ...
- Remove Duplicates from Sorted List | & ||
Remove Duplicates from Sorted List I Given a sorted linked list, delete all duplicates such that eac ...
- 编译安装0bda 8179无线网卡
CentOS下安装USB无线网卡(Obda:8179) 参考:http://blog.163.com/thinki_cao/blog/static/83944875201311593529913/ c ...
- bootbox显示中文的按钮
$("selector").on('click',function(){ bootbox.confirm({ title : "请确认", buttons: { ...
- Windows下尝试PHP7提示丢失VCRUNTIME140.DLL的问题解决
前天PHP7.0.0正式版发布了,有一些比较好的改进,官方也说速度比php5.6快了两倍,性能上有了很大提升,并且也发布了从php5.x向php7迁移的问题,所以今后php网站迁移后能够大幅度的提升网 ...
- php中static静态关键字的使用
php中除了常规类和方法的使用,访问控制之外,还有静态关键字static,静态变量可以是局部变量也可以是全局变量,当一个程序段执行完毕时,静态变量并没有消失,它依然存在于内存中,下次在定义时还是以前的 ...