Light OJ 1068
数位DP
#include <cstdio>
#include <cstring>
using namespace std; const int MAX_DIGIT = ;
const int MAX_K = ; long long n;
int f[MAX_DIGIT];
long long memoize[MAX_DIGIT][MAX_DIGIT * ][MAX_DIGIT * ];
int k; int to_digits(long long a)
{
int ret = ;
while (a > )
{
f[ret++] = a % ;
a /= ;
}
return ret;
} long long dfs(int digit, bool less, int sum, int remainder)
{
if (digit < )
{
return sum == && remainder == ;
}
if (less && memoize[digit][sum][remainder] != -)
{
return memoize[digit][sum][remainder];
}
int limit = less ? : f[digit];
long long ret = ;
for (int i = ; i <= limit; i++)
{
ret += dfs(digit - , less || i < f[digit], (sum + i) % k, (remainder * + i) % k);
}
if (less)
{
memoize[digit][sum][remainder] = ret;
}
return ret;
} long long work(long long n)
{
if (n < )
{
return ;
}
if (n == )
{
return ;
}
int len = to_digits(n);
if (k >= MAX_DIGIT * )
{
return ;
}
return dfs(len - , false, , );
} int main()
{
int t;
scanf("%d", &t);
for (int i = ; i <= t; i++)
{
int a, b;
scanf("%d%d%d", &a, &b, &k);
memset(memoize, -, sizeof(memoize));
printf("Case %d: %lld\n", i, work(b) - work(a - ));
}
return ;
}
Light OJ 1068的更多相关文章
- light oj 1068 - Investigation  数位DP
		
思路:典型的数位DP!!! dp[i][j][k]:第i位,对mod取余为j,数字和对mod取余为k. 注意:由于32位数字和小于95,所以当k>=95时,结果肯定为0. 这样数组就可以开小点, ...
 - light oj 1068 数位dp
		
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> ...
 - Light OJ 1114 Easily Readable 字典树
		
题目来源:Light OJ 1114 Easily Readable 题意:求一个句子有多少种组成方案 仅仅要满足每一个单词的首尾字符一样 中间顺序能够变化 思路:每一个单词除了首尾 中间的字符排序 ...
 - Light OJ 1429 Assassin`s Creed (II) BFS+缩点+最小路径覆盖
		
题目来源:Light OJ 1429 Assassin`s Creed (II) 题意:最少几个人走全然图 能够反复走 有向图 思路:假设是DAG图而且每一个点不能反复走 那么就是裸的最小路径覆盖 如 ...
 - Light OJ 1406 Assassin`s Creed 减少国家DP+支撑点甚至通缩+最小路径覆盖
		
标题来源:problem=1406">Light OJ 1406 Assassin`s Creed 意甲冠军:向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路: ...
 - Light OJ 1316 A Wedding Party 最短路+状态压缩DP
		
题目来源:Light OJ 1316 1316 - A Wedding Party 题意:和HDU 4284 差点儿相同 有一些商店 从起点到终点在走过尽量多商店的情况下求最短路 思路:首先预处理每两 ...
 - light oj 1007 Mathematically Hard (欧拉函数)
		
题目地址:light oj 1007 第一发欧拉函数. 欧拉函数重要性质: 设a为N的质因数.若(N % a == 0 && (N / a) % a == 0) 则有E(N)=E(N ...
 - Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖
		
题目来源:Light OJ 1406 Assassin`s Creed 题意:有向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路:最少的的人能够走全然图 明显是最小路径覆盖问题 ...
 - Light OJ 1288 Subsets Forming Perfect Squares 高斯消元求矩阵的秩
		
题目来源:Light OJ 1288 Subsets Forming Perfect Squares 题意:给你n个数 选出一些数 他们的乘积是全然平方数 求有多少种方案 思路:每一个数分解因子 每隔 ...
 
随机推荐
- Orchard源码分析(7.1):Routing(路由)相关
			
概述 关于ASP.NET MVC中路由有两个基本核心作用,一是通过Http请求中的Url参数等信息获取路由数据(RouteData),路由数据包含了area.controller.action的名称等 ...
 - Orchard源码分析(4.4):Orchard.Caching.CacheModule类
			
概述 CacheModule也是一个Autofac模块. 一.CacheModule类 CacheModule将DefaultCacheManager注册为ICacheManager: ...
 - PHP 短连接生成
			
<?php #短连接生成算法 class Short_Url { #字符表 public static $charset = "0123456789ABCDEFGHIJKLMNOPQR ...
 - Java当中的内存分配以及值传递问题内存解析
			
首先必须说明作为Java程序员对于内存只要有大致的了解就可以了,如果你对Java当中的某一个知识点在不需要分析内存分配过程的情况下可以掌握,那就大可不必去研究内存.如果你对知识点已经掌握,那么你应该把 ...
 - 2015年11月30日 spring初级知识讲解(一)装配Bean
			
序,Spring的依赖注入是学习spring的基础.IOC为控制反转,意思是需要的时候就由spring生成一个,而不是先生成再使用. 写在前面 Spring提供面向接口编程,面向接口编程与依赖注入协作 ...
 - SqlServer代理执行[分发清除: distribution] 无法删除快照文件
			
每天偶尔检查数据库作业是否失败,发现有错误 select top 10 job_id,run_date,run_time,run_duration,step_name,message from ms ...
 - linxu scp命令
			
\ svn 删除所有的 .svn文件 find . -name .svn -type d -exec rm -fr {} \; linux之cp/scp命令+scp命令详解 名称:cp 使用权限: ...
 - MySQL源码分析以及目录结构 2
			
原文地址:MySQL源码分析以及目录结构作者:jacky民工 主要模块及数据流经过多年的发展,mysql的主要模块已经稳定,基本不会有大的修改.本文将对MySQL的整体架构及重要目录进行讲述. 源码结 ...
 - Lab1--关于安装JUnit的简要描述
			
安装JUnit的过程描述: 下载两个jar包: hamcrest-all-1.3.jar junit-4.12.jar 注意在导入完成jar包之后不要随意改变jar包的路径. 创建java程序,书写如 ...
 - 《深入浅出WPF》笔记三
			
1.Field:字段,封装在类中的变量. Method:方法,封装在类中的函数. 成员:类中的字段和方法,可分为静态成员和非静态成员. 静态字段在内存中只有一份拷贝. 非静态字段是每个实例拥有一个拷贝 ...