[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 ...
随机推荐
- mysql创建视图
CREATE ALGORI`sync_user`CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER V ...
- android 学习随笔十三(网络:多线程下载)
多线程断点续传下载1.多线程:快* 原理:抢占服务器资源* 单线程下载:线程从第0个字节开始下,下到最后一个字节,在本地硬盘的临时文件中从第0个字节开始写,写到最后一个字节,下载完成时,临时文件也写完 ...
- linux内核中jiffies的回绕问题【转】
本文转载自:http://blog.csdn.net/yuanlulu/article/details/6019862 ======================================== ...
- UnicodeDecodeError: ‘ascii’ codec can’t decode...: ordinal not in range(128 问题解决
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in range(128 原 ...
- android 中的几种目录
1. context.getExternalFilesDir() ==> /sdcard/Android/data/<package_name>/files/ 一般放一些长时 ...
- java中枚举类的使用详解
/* * 通过JDK5提供的枚举来做枚举类 */ public enum Direction2 { FRONT("前"), BEHIND("后"), LEFT( ...
- Java中如何在另一个类里面使用运行类中的对象,举例说明了一下。
package 计时器; import java.util.Timer; import java.util.TimerTask; /* * 主要是想在另一个类里面,使用该类的对象,如何使用呢?如何传递 ...
- Zero_qiqi DIV模式的省市区三级联动
1].[代码] [HTML]代码 跳至 [1] [2] [3] [4] [5] [6] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...
- 基本包装类型:Boolean、Number 和String
/* var box = 'Mr. Lee'; //基本类型 //alert(box); //alert(typeof box); alert(box.substring(2)); //对象.方法(参 ...
- hdwiki model目录下的函数类
model目录下的函数类 actions.class.php(站内地图相关) getHTML:获得页面菜单和相关信息 getMap:生成站内地图 adv.class.php 对wiki_adve ...