蓝桥杯 K好数(数位DP)
来源:互联网 发布:社会 知乎 编辑:程序博客网 时间:2024/05/18 00:56
地址:http://lx.lanqiao.org/problem.page?gpid=T13
算法训练 K好数
时间限制:1.0s 内存限制:256.0MB
问题描述
如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大,请你输出它对1000000007取模后的值。
输入格式
输入包含两个正整数,K和L。
输出格式
输出一个整数,表示答案对1000000007取模后的值。
样例输入
4 2
样例输出
7
数据规模与约定
对于30%的数据,KL <= 106;
对于50%的数据,K <= 16, L <= 10;
对于100%的数据,1 <= K,L <= 100。
代码:
#include<iostream>#include<cmath>#include<cstdio>#include<cstring>using namespace std;#define LL __int64#define Mod 1000000007LL dp[2][110][110];int k,num[110];LL dfs(int len,int las,bool z){ //这里根本不用定义极限情况 if(!len) return 1; if(~dp[z][las][len]) return dp[z][las][len]; LL ans=0; for(int i=0;i<=k-1;i++){ if(i-las==1||i-las==-1) continue; if(z|i) ans+=dfs(len-1,i,z|i); else ans+=dfs(len-1,102,z|i); ans%=Mod; } return dp[z][las][len]=ans;}int main(){ memset(dp,-1,sizeof(dp)); int n; scanf("%d%d",&k,&n); printf("%I64d\n",(dfs(n,102,0)-dfs(n-1,102,0)+Mod)%Mod); //直接用DFS作为返回值 return 0;}
0 0
- 蓝桥杯 K好数(数位DP)
- 蓝桥杯 算法训练 K好数(数位dp)
- 蓝桥杯 K好数(dp)
- 算法训练 K好数 数位DP+同余定理
- lanqiao 小白算法练习 k好数 数位dp
- 蓝桥杯 K好数(DP)
- 蓝桥杯 K好数(DP)
- 蓝桥杯 k好数dp
- 蓝桥杯 K好数(DP)
- K好数(DP)
- K好数 dp
- DP-K 好数
- K好数【DP】
- 蓝桥杯ALGO-3 K好数(dp)
- 蓝桥杯 K好数 算法训练 (动态规划DP)
- K好数(DP算法)
- DP训练 K好数
- C++ DP K好数
- oracle sid / serverName不同类型的数据库连接
- @SuppressWarnings注解
- 简单的Linux sh脚本文件
- 经典排序算法之——堆排序
- hdu 3308 LCIS(线段树单点更新+区间合并)中等难度的题目
- 蓝桥杯 K好数(数位DP)
- JavaScript 编码规范(Google Coding-style for JavaScript)
- DeviceIOControl实战
- 轻松创建Silverlight 4开发环境
- windows下开发apache模块环境部署(apache,perl,apxs)
- ubuntu 目录结构
- iOS 常用的加密方法
- 【设计模式攻略】创建型模式之Abstract Factory模式
- OnCommand 与OnCmdMsg