多校5 HDU5787 K-wolf Number 数位DP
// 多校5 HDU5787 K-wolf Number 数位DP
// dp[pos][a][b][c][d][f] 当前在pos,前四个数分别是a b c d
// f 用作标记,当现在枚举的数小于之前的数时,就不用判断i与dig[pos]的大小
// 整体来说就,按位往后移动,每次添加后形成的数都小于之前的数,并且相邻k位不一样,一直深搜到cnt位
// http://blog.csdn.net/weizhuwyzc000/article/details/52097690 // #pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
const double inf = 0x3f3f3f3f;
#define lson l,mid,rt<<1
// #define rson mid+1,r,rt<<1|1
const int N = ;
const int M = 1e6+;
const int MOD = 1e9+;
#define LL long long
#define LB long double
// #define mi() (l+r)>>1
double const pi = acos(-);
const double eps = 1e-;
void fre(){freopen("in.txt","r",stdin);}
void freout(){freopen("out.txt","w",stdout);}
inline int read(){int x=,f=;char ch=getchar();while(ch>''||ch<'') {if(ch=='-') f=-;ch=getchar();}while(ch>=''&&ch<='') { x=x*+ch-'';ch=getchar();}return x*f;} LL l,r,cnt;
int k;
int dig[];
LL dp[][][][][][];
int vis[][][][][][];
int cas;
LL dfs(LL pos,int a,int b,int c,int d,int f){
if(pos==cnt) return 1LL;
if(vis[pos][a][b][c][d][f]==cas) return dp[pos][a][b][c][d][f];
vis[pos][a][b][c][d][f]=cas;
LL ans=;
if(f){
for(int i=;i<;i++){
if(k==) {if(d==i) continue;}
else if(k==) {if(d==i||c==i) continue;}
else if(k==) {if(d==i||c==i||b==i) continue;}
else {if(d==i||c==i||b==i||a==i) continue;}
if(i==){
if(d==) ans+=dfs(pos+,a,b,c,d,f);
else ans+=dfs(pos+,b,c,d,i,f);
}
else ans+=dfs(pos+,b,c,d,i,f);
}
}
else{
for(int i=;i<;i++){
if(k==) {if(d==i) continue;}
else if(k==) {if(d==i||c==i) continue;}
else if(k==) {if(d==i||c==i||b==i) continue;}
else {if(d==i||c==i||b==i||a==i) continue;}
if(i<dig[pos]){
if(i==){
if(d==) ans+=dfs(pos+,a,b,c,d,);
else ans+=dfs(pos+,b,c,d,i,);
}
else ans+=dfs(pos+,b,c,d,i,);
}
else if(i==dig[pos]){
if(i==){
if(d==) ans+=dfs(pos+,a,b,c,d,f);
else ans+=dfs(pos+,b,c,d,i,f);
}
else
ans+=dfs(pos+,b,c,d,i,f);
}
}
}
return dp[pos][a][b][c][d][f]=ans;
} bool ck(){
for(int i=;i<cnt;i++){
for(int j=i-;j>=max(,i-k+);j--){
if(dig[i]==dig[j]) return false;
}
}
return true;
}
int tem[];
int main(){
while(~scanf("%I64d%I64d%d",&l,&r,&k)){
cnt=;
while(r) tem[cnt++]=r%,r=r/;
int k=;
for(int i=cnt-;i>=;i--) dig[k++]=tem[i];
cas++;
LL ans1=dfs(,,,,,);
cnt=,k=;
while(l) tem[cnt++]=l%,l=l/; for(int i=cnt-;i>=;i--) dig[k++]=tem[i];
cas++;
LL ans2=dfs(,,,,,);
if(ck()) ans2--;
printf("%I64d\n",ans1-ans2);
}
return ;
}
多校5 HDU5787 K-wolf Number 数位DP的更多相关文章
- HDU5787 K-wolf Number 数位dp
分析:赛场上也知道是裸的数位dp,但是无奈刷数位dp题刷的太少了,并不能写出来 一点感想:赛后补题,看了题解的map记录状态,一脸蒙逼,也是非常的不爽,然后想看别人写的,不是递归就是写的比较乱 而且我 ...
- codeforces Hill Number 数位dp
http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits: 5000 MS Memory Limits: ...
- HDU 5787 K-wolf Number 数位DP
K-wolf Number Problem Description Alice thinks an integer x is a K-wolf number, if every K adjacen ...
- HDU 3709 Balanced Number (数位DP)
Balanced Number Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- beautiful number 数位DP codeforces 55D
题目链接: http://codeforces.com/problemset/problem/55/D 数位DP 题目描述: 一个数能被它每位上的数字整除(0除外),那么它就是beautiful nu ...
- hdu 5898 odd-even number 数位DP
传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...
- Fzu2109 Mountain Number 数位dp
Accept: 189 Submit: 461Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description One ...
- hdu_3565_Bi-peak Number(数位DP)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3565 题意:给你一个区间,让你找这个区间内有两个山峰的数的最大和,什么是两个山峰,比如121121 ...
- HDU 5179 beautiful number 数位dp
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5179 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
随机推荐
- JavaWeb项目开发案例精粹-第2章投票系统-003Dao层
1. package com.sanqing.dao; import java.util.List; import com.sanqing.bean.Vote; import com.sanqing. ...
- 其实 Dropbox 的缺点也很明显,速度慢,空间小(我对国内的网盘的建议)
作者:王成链接:http://www.zhihu.com/question/20237962/answer/15146386来源:知乎著作权归作者所有,转载请联系作者获得授权. 国内的云存储服务基本上 ...
- C++:派生类的构造函数和析构函数
4.2 派生类的构造函数和析构函数4.2.1 派生类构造函数和析构函数的执行顺序 通常情况下,当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数:当撤销派生类对象时,则先执行派生类 ...
- 坑爹的Mysql
本想尝试下如何使用Spring来管理Hibernate的事务,当配置好Spring的配置文件后,进行插入数据,结果报错了,错误是: Mysql Field * doesn't have a defau ...
- IIS 无法打开页面,只能重启的问题
最终解决方案: 要变通解决此问题,启用 EnableAggressiveMemoryUsage 注册表项在注册表中.当启用了 EnableAggressiveMemoryUsage 注册表项 Http ...
- [HDOJ1827]Summer Holiday(强连通分量,缩点)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1827 缩点后统计入度和当前强连通分量中最小花费,然后记录入度为0的点的个数和花费和就行了. /* ━━ ...
- npm在项目目录安装插件需要使用sudo
今天使用node的npm安装插件的时候遇到一个问题,那就是在项目目录里面安装插件的时候,必须使用超级用户(sudo)执行才会安装成功,否则会报如下错误: 以安装 gulp-uglify 为例 $ np ...
- 1930. Ivan's Car(spfa)
1930 简单二维 标记一下是上坡还是下坡 #include <iostream> #include<cstdio> #include<cstring> #incl ...
- HDU3709 Balanced Number (数位dp)
Balanced Number Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Descript ...
- 获取本机外网ip和内网ip
获取本机外网ip //获取本机的公网IP public static string GetIP() { string tempip = ""; try { WebRequest r ...