【HDU】4352 XHXJ's LIS(数位dp+状压)
题目
传送门:QWQ
分析
数位dp
状压一下现在的$ O(nlogn) $的$ LIS $的二分数组
数据小,所以更新时直接暴力不用二分了。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=;
ll dp[maxn][<<][];int k,digit[maxn];
int nextstate(int state,int x){
for(int i=x;i<;i++){
if(state&(<<i)){
state^=(<<i); break;
}
}
return (state|(<<x));
}
int getnum(int x){
int ans=;
while(x){
if(x&) ans++;
x>>=;
}
return ans;
}
ll dfs(int pos,int state,int leadingzero,int border){
if(pos==) return getnum(state)==k;
if(!leadingzero && !border && dp[pos][state][k]!=-) return dp[pos][state][k];
ll ans=;
int end=border?digit[pos]:;
for(int i=;i<=end;i++){
if(i== && leadingzero) ans+=dfs(pos-,state,,border&&i==end);
else ans+=dfs(pos-,nextstate(state,i),,border&&i==end);
}
if(!leadingzero&&!border) dp[pos][state][k]=ans;
return ans;
}
ll cal(ll n){
int pos=;
while(n){
digit[++pos]=n%; n/=;
}
return dfs(pos,,,);
}
int main(){
int t;ll l,r; cin>>t;
memset(dp,-,sizeof(dp));
for(int i=;i<=t;i++){
cin>>l>>r>>k;
cout<<"Case #"<<i<<": "<<cal(r)-cal(l-)<<endl;
}
return ;
}
/*
100
1234567 123456789012 8
5678567890101 1234567890123456 9
*/
【HDU】4352 XHXJ's LIS(数位dp+状压)的更多相关文章
- HDU.4352.XHXJ's LIS(数位DP 状压 LIS)
题目链接 \(Description\) 求\([l,r]\)中有多少个数,满足把这个数的每一位从高位到低位写下来,其LIS长度为\(k\). \(Solution\) 数位DP. 至于怎么求LIS, ...
- hdu 4352 XHXJ's LIS(数位dp+状压)
Problem Description #define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then carefull ...
- HDU 4352 XHXJ's LIS 数位dp lis
目录 题目链接 题解 代码 题目链接 HDU 4352 XHXJ's LIS 题解 对于lis求的过程 对一个数列,都可以用nlogn的方法来的到它的一个可行lis 对这个logn的方法求解lis时用 ...
- $HDU$ 4352 ${XHXJ}'s LIS$ 数位$dp$
正解:数位$dp$+状压$dp$ 解题报告: 传送门! 题意大概就是港,给定$[l,r]$,求区间内满足$LIS$长度为$k$的数的数量,其中$LIS$的定义并不要求连续$QwQ$ 思路还算有新意辣$ ...
- 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 (数位DP+LIS+状态压缩)
题意:给定一个区间,让你求在这个区间里的满足LIS为 k 的数的数量. 析:数位DP,dp[i][j][k] 由于 k 最多是10,所以考虑是用状态压缩,表示 前 i 位,长度为 j,状态为 k的数量 ...
- hdu 4352 XHXJ's LIS 数位DP+最长上升子序列
题目描述 #define xhxj (Xin Hang senior sister(学姐))If you do not know xhxj, then carefully reading the en ...
- 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][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)
题意 求区间[L,R]内满足各位数构成的数列的最长上升子序列长度为K的数的个数. 思路 一开始的思路是枚举数位,最后判断LIS长度.但是这样的话需要全局数组存枚举的各位数字,同时dp数组的区间唯一性也 ...
随机推荐
- Spring IOC和IOC容器
IOC的核心理念即是控制反转.将对依赖的控制从具体业务对象手中转交到平台或框架中,需要的时候再由平台或框架注入到具体业务对象中.可以说依赖注入是控制反转的实现方式. IOC的优点: 降低代码耦合度 减 ...
- 将数据提取到CSV文件中保存
这个方法可以实现,登录获取的token放入CSV文件,供后续调用,这里没有用登录举例 FileWriter fstream = new FileWriter("E:\\apache-jmet ...
- linux下升级npm以及node
npm升级 废话不多说,直接讲步骤.先从容易的开始,升级npm. npm这款包管理工具虽然一直被人们诟病,很多人都推荐使用yarn,但其使用人数还是不见减少,况且npm都是随node同时安装好的,一时 ...
- Hibernate主键生成器
主键生成器负责生成数据表记录的主键:increment:为long,short或者int类型主键生成唯一标识.只有在没有其他进程往同一张表中插入数据时才能使用.在集群下不能使用! identity:在 ...
- Javascript设计模式笔记
Javascript是越来越厉害了,一统前后端开发.于是最近把设计模式又看了一遍,顺便做了个笔记,以方便自己和他人共同学习. 笔记连载详见:http://www.meteorcn.net/wordpr ...
- StringUtils工具类的isBlank()方法使用说明
- 【hive】关于用户留存率的计算
首先用户留存率一般是面向新增用户的概念,是指某一天注册后的几天还是否活跃,是以每天为单位进行计算的.一般收到的需求都是一个时间段内的新增用户的几天留存 (1)找到这个时间段内的新增用户(也可能含有地区 ...
- [转]Ubuntu默认root用户密码
Ubuntu默认root用户密码 在试验的过程中,安装完Ubuntu后忽然意识到没有设置root密码,不知道密码自然就无法进入根用户下. 到网上搜了一下,原来是这么回事:Ubuntu的默认root密码 ...
- bzoj3901
题解: 就是按照常规的合并 期望有一点麻烦 首先计算全部的和 再减去有多少种 具体看看http://blog.csdn.net/PoPoQQQ/article/category/2542261这个博客 ...
- 201621123010 《Java程序设计》第2周学习总结
1.本周学习总结 Java有基本数据类型(类似c)和引用数据类型(不同于c)两种数据类型. Java是面向对象的语言,引用类型变量存放指向对象的引用,而不是该对象本身.因此判断两对象值是否相等时,需使 ...