[HDOJ5787]K-wolf Number(数位DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5787
题意:求[L,R]区间内的数字,使得所有长度为k的子数列内所有数位都不同。
K<=5的所以可以直接记录到前k个数字的值是多少。dp(l,p1,p2,p3,p4)分别记录就可以了。
弱智了WA了好几发,因为k每次取值是不一样的,所以dp数组还是应当放在while里清空。
#include <bits/stdc++.h>
using namespace std; typedef long long LL;
const int maxn = ;
int k;
int digit[maxn];
LL dp[maxn][][][][];
LL l, r; bool ok(int a, int b, int c, int d, int e) {
if(k == ) return e != d;
if(k == ) return e != d && e != c;
if(k == ) return e != d && e != c && e != b;
if(k == ) return e != d && e != c && e != b && e != a;
} LL dfs(int l, int p1, int p2, int p3, int p4, bool flag) {
if(l == ) return p4 != ;
if(!flag && ~dp[l][p1][p2][p3][p4]) return dp[l][p1][p2][p3][p4];
LL ret = ;
int pos = flag ? digit[l] : ;
for(int i = ; i <= pos; i++) {
if(i == && p4 == ) ret += dfs(l-,,,,,flag&&(i==pos));
else if(ok(p1,p2,p3,p4,i)) ret += dfs(l-,p2,p3,p4,i,flag&&(i==pos));
}
if(!flag) dp[l][p1][p2][p3][p4] = ret;
return ret;
} LL f(LL x) {
if(l <= ) return ;
int pos = ;
while(x) {
digit[++pos] = x % ;
x /= ;
}
return dfs(pos,,,,,true);
} int main() {
// freopen("in", "r", stdin);
while(~scanf("%I64d%I64d%d",&l,&r,&k)) {
memset(dp, -, sizeof(dp));
printf("%I64d\n", f(r)-f(l-));
}
return ;
}
[HDOJ5787]K-wolf Number(数位DP)的更多相关文章
- 多校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 用作标记,当现在枚举的数小 ...
- 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 ...
- HDU5787 K-wolf Number 数位dp
分析:赛场上也知道是裸的数位dp,但是无奈刷数位dp题刷的太少了,并不能写出来 一点感想:赛后补题,看了题解的map记录状态,一脸蒙逼,也是非常的不爽,然后想看别人写的,不是递归就是写的比较乱 而且我 ...
- 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 ...
随机推荐
- Mongodb 笔记09 备份、部署MongoDB
备份 1. 只有在有信心能在紧急情况下完成迅速部署的情况下,备份才是有用的.所以,无论选择了哪种备份技术,一定要对备份及恢复备份的操作进行练习,知道了然于心. 2. 通常情况下,应对副本集的非主节点( ...
- linux端口
1.查看开放的端口 netstat -anp 来查看哪些端口被打开. 注:加参数'-n'会将应用程序转为端口显示,即数字格式的地址,如:nfs->2049, ftp->21,因此可以开启两 ...
- Google Map: JavaScript API RefererNotAllowedMapError
visite https://console.developers.google.com/apis/credentials and select the project you use. http:/ ...
- Virtualbox后台管理之VBoxManage
Virtualbox是提供了后台启动的.只是不是默认的. 查看有哪些虚拟机 VBoxManage list vms 查看虚拟的详细信息 VBoxManage list vms --long 查看运行着 ...
- XML 解析 -- IE ,Chrome
通用的method <script type="text/javascript"> //for chrome, attach method to XMLDocument ...
- Class.forName("ClassName")与ClassName.class的区别
引发问题的来源:最近在看比较深入的JVM相关的书,不得不感慨,JVM确实是比较深奥,很多地方难以理解不说,在网上还找不到什么资料,发现一个左思右想都想不明白的问题上网来搜索,结果基本上都是从书上cop ...
- 模拟namenode崩溃,使用secondarynamenode恢复
方法一.使用namespaceID 1.在namenode节点上,将dfs.name.dir指定的目录中(这里是name目录)的内容情况,以此来模拟故障发生. [hadoop@node1 name]$ ...
- 百度地图瓦片原理 | 百度map使用教程
百度地图瓦片原理: http://blog.csdn.net/mygisforum/article/details/22997879 百度map使用教程: http://www.myexception ...
- 【转】JS 和 java 交互
android中如何获得webView中的内容发表于 2011 年 06 月 13 日 由 admin本文概要:在程序中经常会用到webView来显示网页,但如果能够得到网页中的内容呢,本文将给你一个 ...
- SlickGrid example 5:带子项的展开收缩
带子项的展开收缩. 代码: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Ty ...