HDU 5787:K-wolf Number(数位DP)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5787
题意:要求相邻的K个位的数不能相同,在[L,R]区间有多少个这样的数.
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int bit[];
long long dp[][][][][];
int k; //考虑前导零:d = 10代表前一位是0, 当(d == 10 && u == 0)表示当前这位为0并且前4位都是0 bool check(int a, int b, int c, int d, int u)
{
if(k == ) return u != d;
else if(k == ) return u != d && u != c;
else if(k == ) return u != d && u != c && u != b;
else return u != d && u != c && u != b && u != a;
} long long dfs(int pos, int a, int b, int c, int d, bool flag)
{
if(pos <= ) return d != ;
long long res = dp[pos][a][b][c][d];
if(flag && res != -) return res;
long long ans = ;
int up = flag ? : bit[pos];
for(int u = ; u <= up; u++) {
if(d == && u == ) {
ans += dfs(pos - , a, b, c, d, flag || u != up);
} else if(check(a, b, c, d, u)) {
ans += dfs(pos - , b, c, d, u, flag || u != up);
}
}
if(flag) dp[pos][a][b][c][d] = ans;
return ans;
} long long solve(long long x)
{
int len = ;
while(x) {
bit[++len] = x % ;
x /= ;
}
return dfs(len, , , , , );
} int main()
{
long long l, r;
while(~scanf("%I64d%I64d%d", &l, &r, &k)) {
memset(dp, -, sizeof(dp));
printf("%I64d\n", solve(r) - solve(l - ));
}
return ;
}
另一种:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int bit[];
long long dp[][][][][][];
int k; //考虑前导零:d = 10代表前一位是0, 当(d == 10 && u == 0)表示当前这位为0并且前4位都是0 bool check(int a, int b, int c, int d, int u)
{
if(k == ) return u != d;
else if(k == ) return u != d && u != c;
else if(k == ) return u != d && u != c && u != b;
else return u != d && u != c && u != b && u != a;
} long long dfs(int pos, int a, int b, int c, int d, bool flag, bool zero)
{
if(pos <= ) return zero;
long long res = dp[pos][a][b][c][d][zero];
if(flag && res != - && zero) return res;
long long ans = ;
int up = flag ? : bit[pos];
for(int u = ; u <= up; u++) {
if(!zero && u == ) {
ans += dfs(pos - , a, b, c, d, flag || u != up, );
} else if(check(a, b, c, d, u)) {
ans += dfs(pos - , b, c, d, u, flag || u != up, );
}
}
if(flag) dp[pos][a][b][c][d][zero] = ans;
return ans;
} long long solve(long long x)
{
int len = ;
while(x) {
bit[++len] = x % ;
x /= ;
}
return dfs(len, , , , , , );
} int main()
{
long long l, r;
while(~scanf("%I64d%I64d%d", &l, &r, &k)) {
memset(dp, -, sizeof(dp));
printf("%I64d\n", solve(r) - solve(l - ));
}
return ;
}
HDU 5787: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 用作标记,当现在枚举的数小 ...
- HDU.4352.XHXJ's LIS(数位DP 状压 LIS)
题目链接 \(Description\) 求\([l,r]\)中有多少个数,满足把这个数的每一位从高位到低位写下来,其LIS长度为\(k\). \(Solution\) 数位DP. 至于怎么求LIS, ...
- 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 5898 odd-even number 数位DP
传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...
- HDU 3709 Balanced Number (数位DP)
Balanced Number Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- HDU 5179 beautiful number 数位dp
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5179 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
- hdu 5898 odd-even number(数位dp)
Problem Description For a number,if the length of continuous odd digits is even and the length of co ...
- HDU 5898 odd-even number (数位DP) -2016 ICPC沈阳赛区网络赛
题目链接 题意:一个数字,它每个数位上的奇数都形成偶数长度的段,偶数位都形成奇数长度的段他就是好的.问[L , R]的好数个数. 题解:裸的数位dp, 从高到低考虑每个数位, 状态里存下到当前位为止的 ...
- 2017"百度之星"程序设计大赛 - 复赛1005&&HDU 6148 Valley Numer【数位dp】
Valley Numer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- HDU 4352 - XHXJ's LIS - [数位DP][LIS问题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4352 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
随机推荐
- iOS 设置导航栏的颜色和导航栏上文字的颜色
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...
- 深入理解CSS3 Animation 帧动画 ( steps )
作者:Aaron的博客 网址:http://www.cnblogs.com/aaronjs/p/4642015.html --------------------------------------- ...
- Orchard学习系列-----如何运行的
感慨:当接触到微软这套程序时,代码实在是太好了,好的几乎都读不懂.很久之前就对这个套开源程序特别感兴趣,但读不明白也让人郁闷. 背景(Orchard官网): 可组装系统的CMS系统,OrChard在运 ...
- Swift动画编程指南-01 简介
大家好,我是老镇,这段时间家里和工作上发生了很多的事情,所以很长一段时间都没有出来搞什么小动作了.在接下来的一段时间内我会制作一些列关于使用Swift进行动画编程的视频,希望和大家胃口. 在iOS的世 ...
- JAVA JDBC连接 SQLServer2012
连接数据库的java测试代码 import java.sql.*; public class ConManager { final static String cfn = "com.micr ...
- 转:Jmeter之Bean shell使用(二)
上一篇Jmeter之Bean shell使用(一)简单介绍了下Jmeter中的Bean shell,本文是对上文的一个补充,主要总结下常用的几种场景和方法,相信这些基本可以涵盖大部分的需求.本节内容如 ...
- android课程表的实现
//图片下方的码段主要实现了课程表所要显示的基本布局,采用ondraw的方法. //别的内容可以根据自己兴趣添加,下面是本人做的,仅供参考. package com. ...
- PHP漏洞全解(详细介绍)
转载 http://www.jb51.net/article/31898.htm 针对PHP的网站主要存在下面几种攻击方式: 1.命令注入(Command Injection) 2.eval注入(E ...
- MDX Order排序
Order基础用法: Numeric expression syntaxOrder(Set_Expression, Numeric_Expression [ , { ASC | DESC | BASC ...
- hue安装与部署
运行环境 centOS 6.6 hadoop 2.4.0 hive 1.2.0 spark 1.4.1 HUE 3.9 介绍: Hue是一个开源的Apache Hadoop UI系统,最早是由Clou ...