这题要求区间有多少个模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)的更多相关文章

  1. light oj 1068 - Investigation 数位DP

    思路:典型的数位DP!!! dp[i][j][k]:第i位,对mod取余为j,数字和对mod取余为k. 注意:由于32位数字和小于95,所以当k>=95时,结果肯定为0. 这样数组就可以开小点, ...

  2. LightOJ 1068 Investigation (数位dp)

    problem=1068">http://www.lightoj.com/volume_showproblem.php?problem=1068 求出区间[A,B]内能被K整除且各位数 ...

  3. 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 ...

  4. 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP

    [BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...

  5. bzoj1026数位dp

    基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...

  6. uva12063数位dp

    辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...

  7. HDU2089 不要62[数位DP]

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. 数位DP GYM 100827 E Hill Number

    题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...

  9. 数位dp总结

    由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...

随机推荐

  1. Windbg对过滤驱动DriverEntry函数下断点技巧

    方法1: 1> 先用DeviceTree.exe查看指定的过滤驱动的Load Address(加载地址) 2> 再用LordPE.EXE查看指定过滤驱动文件的入口点地址 3> 计算过 ...

  2. [BZOJ2303][Apio2011]方格染色

    [BZOJ2303][Apio2011]方格染色 试题描述 Sam和他的妹妹Sara有一个包含n × m个方格的 表格.她们想要将其的每个方格都染成红色或蓝色. 出于个人喜好,他们想要表格中每个2 × ...

  3. STL之list容器用法

    List 容器 list是C++标准模版库(STL,Standard Template Library)中的部分内容.实际上,list容器就是一个双向链表,可以高效地进行插入删除元素. 使用list容 ...

  4. Coursera台大机器学习技法课程笔记03-Kernel Support Vector Machine

    这一节讲的是核化的SVM,Andrew Ng的那篇讲义也讲过,讲的也不错. 首先讲的是kernel trick,为了简化将低维特征映射高维特征后的计算,使用了核技巧.讲义中还讲了核函数的判定,即什么样 ...

  5. ZeroMQ之Publish/Subscribe (Java)

    前面的文章介绍了比较简单的Request/Subscribe模式, 这篇文章介绍更为经典的Publish/Subscribe通信模式用来ZeroMQ的实现,其通信方式如下图: 客户端(subscrib ...

  6. Android-自定义meta-data扩展数据

    在接入第三方渠道SDK的时候,经常会看到其配置文件AndroidManifest.xml有类似如下的定义: [html] view plaincopy <!-- appid --> < ...

  7. CSS clearfix

    The problem happens when a floated element is within a container box, that element does not automati ...

  8. Nginx图片剪裁模块探究 http_image_filter_module

    官方地址:http://nginx.org/en/docs/http/ngx_http_image_filter_module.html 煮酒品茶:前半部安装和官方说明,后半部分实践 #yum ins ...

  9. JavaScript 在页面上显示数字时钟

    显示一个钟表 拓展JavaScript计时:http://www.w3school.com.cn/js/js_timing.asp setTimeout() 方法会返回某个值.在下面的语句中,值被储存 ...

  10. Java for LeetCode 034 Search for a Range

    Given a sorted array of integers, find the starting and ending position of a given target value. You ...