HDU 4352
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string.h>
#include <algorithm>
#define LL __int64
using namespace std; LL dp[][<<][];
LL aa,bb;
int a[],k;
/*这道题的难点就在于DP的状态表示了,确实是这样的。DP【pos】【state】【K】,pos表示当前的数位,state表示当前的LIS的状态,K
表示要求的K长度。那个DFS就不解释了,都成模板了。而对于state的转移,是用二进制表示当前状态,因为最长的
序列就是0~9十个数表示,所以有十位的二进制。例如12456的上升序列,下一次出现3,则可表示为12356,至于转移,要联系nlogn解法的
LIS来看了 */
int getnews(int x,int s){
for(int i=x;i<;i++)
if(s&(<<i))return (s^(<<i))|(<<x);
return s|(<<x);
}
int getnum(int s){
int ret=;
while(s)
{
if(s&)ret++;
s>>=;
}
return ret;
} LL dfs(int len,int st,bool zero,bool flag){
if(len==) return getnum(st)==k;
if(!flag&&dp[len][st][k]!=-)
return dp[len][st][k];
int en=flag?a[len]:;
LL ans=;
for(int i=;i<=en;i++){
ans+=dfs(len-,(zero&&i==)?:getnews(i,st),zero&&i==,flag&&i==en);
}
if(!flag) dp[len][st][k]=ans;
return ans;
} LL cal(LL n){
LL tmp=n;
int len=;
while(tmp){
a[++len]=(int)(tmp%);
tmp/=;
}
return dfs(len,,true,true);
} int main(){
memset(dp,-,sizeof(dp));
int T,t=;
scanf("%d",&T);
while(++t<=T){
scanf("%I64d%I64d%d",&aa,&bb,&k);
printf("Case #%d: %I64d\n",t,cal(bb)-cal(aa-1LL));
}
return ;
}
HDU 4352的更多相关文章
- 【HDU 4352】 XHXJ's LIS (数位DP+状态压缩+LIS)
XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 4352 数位dp + 状态压缩
XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 4352 XHXJ's LIS 数位dp lis
目录 题目链接 题解 代码 题目链接 HDU 4352 XHXJ's LIS 题解 对于lis求的过程 对一个数列,都可以用nlogn的方法来的到它的一个可行lis 对这个logn的方法求解lis时用 ...
- HDU 4352 XHXJ's LIS HDU(数位DP)
HDU 4352 XHXJ's LIS HDU 题目大意 给你L到R区间,和一个数字K,然后让你求L到R区间之内满足最长上升子序列长度为K的数字有多少个 solution 简洁明了的题意总是让人无从下 ...
- 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 ...
- hdu 4352 XHXJ's LIS 数位dp+状态压缩
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4352 XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others ...
- HDU 4352 XHXJ's LIS
奇妙的题. 你先得会另外一个nlogn的LIS算法.(我一直只会BIT.....) 然后维护下每个数码作为结尾出现过没有就完了. #include<iostream> #include&l ...
- hdu 4352 XHXJ's LIS 数位DP
数位DP!dp[i][j][k]:第i位数,状态为j,长度为k 代码如下: #include<iostream> #include<stdio.h> #include<a ...
- hdu 4352 "XHXJ's LIS"(数位DP+状压DP+LIS)
传送门 参考博文: [1]:http://www.voidcn.com/article/p-ehojgauy-ot.html 题解: 将数字num字符串化: 求[L,R]区间最长上升子序列长度为 K ...
- HDU.4352.XHXJ's LIS(数位DP 状压 LIS)
题目链接 \(Description\) 求\([l,r]\)中有多少个数,满足把这个数的每一位从高位到低位写下来,其LIS长度为\(k\). \(Solution\) 数位DP. 至于怎么求LIS, ...
随机推荐
- Java web測试分为6个部分
1.功能測试 2.性能測试(包含负载/压力測试)3.用户界面測试 4. 兼容性測试 5. 安全測试 6.接口測试 1 功能測试 1.1 链接測试 链接測试可分为三个方面. 首先,測试全部链接是 ...
- php传值调用和传值调用和变量函数
php传值调用和传值调用和变量函数 代码 <?php //传值调用,$m的值不改变 function text($i){ $i = 'Clive'; echo $i; } text(123); ...
- hdoj--2151--Worm(dp)
Worm Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 自定义数据类型 C++ 结构体类型 共同体类型 枚举类型 类类型{}
一.结构体类型 结构体类型,共用体类型,枚举类型,类类型等统称为自定义类型(user-defined-type,UDT). 结构体相当于其他高级语言中的记录(record);例如: struct St ...
- Linux查找并杀死僵尸进程
1.查看系统是否有僵尸进程 使用Top命令查找,当zombie前的数量不为0时,即系统内存在相应数量的僵尸进程. 2.定位僵尸进程 使用命令ps -A -ostat,ppid,pid,cmd |gre ...
- [Hacker] 端口大全
一 .端口大全 端口:0 服务:Reserved 说明:通常用于分析操作系统.这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果.一种典型的扫描,使 ...
- html5之文件操作
用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件系统,读取文件中的数据.到目前文职,只有FF3.6+和Chrome6 ...
- 抽象工厂模式(AbsFactory)C++实现
模式意图:提供一个创建一系列相关或相互依赖对象的接口,二无需指定他们具体的类. 效果: 分离了具体的类. 使 a.客户与类的实现分离 b.客户通过抽象接口操纵实例 c.产品的类名在实现中 ...
- 02--读书笔记之:C++ Primer (第4版)及习题
推荐博客:http://www.cnblogs.com/xkfz007/archive/2012/08/15/2639381.html 第2章 数据和基本类型 1. 整型 2. 习题:左值和右值 3. ...
- mvc cshtml 中赋值
@{ var str = ""; str = item.ApplyStatus == ? ? ? ? "申请驳回" : ""; } < ...