【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数组的区间唯一性也 ...
随机推荐
- 深入Linux内核架构第一章笔记
1. Linux是多任务系统, 支持并发执行若干进程,系统同时真正运行的进程数目不超过CPU的数量,因此内核会按照时间间隔在不同进程之间切换. 2.确定那个进程运行多长时间的过程称为调度. 3.内核启 ...
- javascript method.
//**************************************************************** //* 名 称:DataLength //* 功 能:计算数据的长 ...
- install ros-indigo-map-server
sudo apt-get install ros-indigo-map-server
- python 字典元素值的乘积
my_dict = {,,} result= for key in my_dict: result=result * my_dict[key] print(result)
- 使用quartz实现定时器功能
首先导入两个包 <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>qua ...
- RxJava和RxAndroid
现在RxJava和RxAndroid越来越火爆,自己在业余时间也学习了一下,感觉确实很好用,之前 为了完成页面刷新,数据请求,组件信息传递的时候,要使用handler,真的是逻辑思路很强,稍微不注意, ...
- 【 Python】模块学习之Flask模板引擎:jinja2
原文链接:https://www.cnblogs.com/dachenzi/p/8242713.html 模板的概念 要了解jinja2,那么需要先理解模板的概念.模板在Python的web开发中广泛 ...
- 这些HTML、CSS知识点,面试和平时开发都需要 No10-No11(知识点:表格操作、代码编写规则)
系列知识点汇总 1.基础篇 这些HTML.CSS知识点,面试和平时开发都需要 No1-No4(知识点:HTML.CSS.盒子模型.内容布局) 这些HTML.CSS知识点,面试和平时开发都需要 No5- ...
- 浅谈jsonp
要谈jsonp,首先要弄明白jsonp是什么,它是用来干嘛的.jsonp其实就是我们常用的script标签,用来解决跨域的,只不过这个标签是动态创建的,为啥要动态创建涅. 举个小栗子: 假如我们远程文 ...
- cdq分治的小结
cdq分治 是一种特殊的分治 他的思想: 1.分治l,mid 2.分治mid+1,r 3.计算l,mid对mid+1,r的影响 3就是最关键的地方 这也是cdq的关键点 想到了这一步基本就可以做了 接 ...