题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4352

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Problem Description
#define xhxj (Xin Hang senior sister(学姐))
If you do
not know xhxj, then carefully reading the entire description is very
important.
As the strongest fighting force in UESTC, xhxj grew up in Jintang,
a border town of Chengdu.
Like many god cattles, xhxj has a legendary life:

2010.04, had not yet begun to learn the algorithm, xhxj won the second prize
in the university contest. And in this fall, xhxj got one gold medal and one
silver medal of regional contest. In the next year's summer, xhxj was invited to
Beijing to attend the astar onsite. A few months later, xhxj got two gold medals
and was also qualified for world's final. However, xhxj was defeated by
zhymaoiing in the competition that determined who would go to the world's
final(there is only one team for every university to send to the world's final)
.Now, xhxj is much more stronger than ever,and she will go to the dreaming
country to compete in TCO final.
As you see, xhxj always keeps a short
hair(reasons unknown), so she looks like a boy( I will not tell you she is
actually a lovely girl), wearing yellow T-shirt. When she is not talking, her
round face feels very lovely, attracting others to touch her face gently。Unlike
God Luo's, another UESTC god cattle who has cool and noble charm, xhxj is quite
approachable, lively, clever. On the other hand,xhxj is very sensitive to the
beautiful properties, "this problem has a very good properties",she always said
that after ACing a very hard problem. She often helps in finding solutions, even
though she is not good at the problems of that type.
Xhxj loves many games
such as,Dota, ocg, mahjong, Starcraft 2, Diablo 3.etc,if you can beat her in any
game above, you will get her admire and become a god cattle. She is very
concerned with her younger schoolfellows, if she saw someone on a DOTA platform,
she would say: "Why do not you go to improve your programming skill". When she
receives sincere compliments from others, she would say modestly: "Please don’t
flatter at me.(Please don't black)."As she will graduate after no more than one
year, xhxj also wants to fall in love. However, the man in her dreams has not
yet appeared, so she now prefers girls.
Another hobby of xhxj is
yy(speculation) some magical problems to discover the special properties. For
example, when she see a number, she would think whether the digits of a number
are strictly increasing. If you consider the number as a string and can get a
longest strictly increasing subsequence the length of which is equal to k, the
power of this number is k.. It is very simple to determine a single number’s
power, but is it also easy to solve this problem with the numbers within an
interval? xhxj has a little tired,she want a god cattle to help her solve this
problem,the problem is: Determine how many numbers have the power value k in
[L,R] in O(1)time.
For the first one to solve this problem,xhxj will upgrade
20 favorability rate。
 
Input
First a integer T(T<=10000),then T lines follow,
every line has three positive integer
L,R,K.(0<L<=R<263-1 and 1<=K<=10).
 
Output
For each query, print "Case #t: ans" in a line, in
which t is the number of the test case starting from 1 and ans is the
answer.
 
Sample Input
1
123 321 2
 
Sample Output
Case #1: 139
 
题解:
要说题解哪家强,说到底还是要看kuangbin神犇https://www.cnblogs.com/kuangbin/archive/2013/05/01/3052657.html
dp[i][j][k]:i为当前进行到的数位;
     j为状态,为10个数字出现过的,其中1的个数就是最长上升子序列长度;
     k为要求的上升子序列的长度;
1、这个i好说,就是pos……
2、那这个j这个状态呢,怎么肥4?且先看这篇文章http://www.cnblogs.com/dilthey/p/8511275.html
  在那篇文章里,用了一个d[]数组来存储“当前ans长度下,LIS的最后一位是哪个数字”,
  我们化用一下这个数组d,用0~9十个位的0 or 1来表示,这个d数组里存了啥,比如说假设d[1]=1,d[2]=3,d[3]=5,d[4]=6,那么在本题下的形式就是sta = 0001101010
  然后我们在那篇文章里的,用num[i]更新d[]的行为,就是这里getNewSta()函数干的事情。
3、最后是这个k,我开始不太懂为什么要加这个k,因为我看到每个case中,k都是不变的,一旦设定好了,整个求解过程中dp数组跟k没有关系;
  然后我看了一下,kuangbin大佬的代码,把memset(dp)写在了循环外,我就想到这是用增加一个dp数组的维度,减少memset以及一些重复计算的时间,
  让我刚开始心存侥幸,想不加这个K维度试试,然后交了一发果然TLE,然后只好老老实实再把维度K加上,同时暗叹一声神犇不愧就是神犇啊!
 
AC代码:
 
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int K;
int dig[];
ll dp[][<<][]; ll getNewSta(ll sta,int num) //运用LIS问题的nlogn思想进行更新状态
{
for(int i=num;i<=;i++)
if(sta&(<<i)) return (sta^(<<i))|(<<num);
return sta|(<<num);
}
int get1cnt(ll sta) //获取状态sta中有多少个“1”
{
int cnt=;
while(sta)
{
cnt+=sta&;
sta>>=;
}
return cnt;
}
ll dfs(int pos,ll sta,bool lead,bool limit) //lead是前导零标记
{
if(pos==) return get1cnt(sta)==K; //精确到某一个数,判断其LIS的长度是否等于K
if(!limit && dp[pos][sta][K]!=-) return dp[pos][sta][K]; int up=limit?dig[pos]:;
ll ans=;
for(int i=;i<=up;i++)
ans+=dfs(pos-,(lead && i==)?:getNewSta(sta,i),lead && i==,limit && i==up); if(!limit) dp[pos][sta][K]=ans;
return ans;
}
ll solve(ll x)
{
int len=;
while(x)
{
dig[++len]=x%;
x/=;
}
return dfs(len,,,);
} int main()
{
int T;
scanf("%d",&T);
memset(dp,-,sizeof(dp));
for(int kase=;kase<=T;kase++)
{
ll L,R;
scanf("%I64d%I64d%d",&L,&R,&K);
printf("Case #%d: %I64d\n",kase,solve(R)-solve(L-));
}
}

HDU 4352 - XHXJ's LIS - [数位DP][LIS问题]的更多相关文章

  1. HDU 4352 XHXJ's LIS 数位dp lis

    目录 题目链接 题解 代码 题目链接 HDU 4352 XHXJ's LIS 题解 对于lis求的过程 对一个数列,都可以用nlogn的方法来的到它的一个可行lis 对这个logn的方法求解lis时用 ...

  2. HDU 4352 XHXJ's LIS (数位DP+LIS+状态压缩)

    题意:给定一个区间,让你求在这个区间里的满足LIS为 k 的数的数量. 析:数位DP,dp[i][j][k] 由于 k 最多是10,所以考虑是用状态压缩,表示 前 i 位,长度为 j,状态为 k的数量 ...

  3. hdu4352 XHXJ's LIS(数位DP + LIS + 状态压缩)

    #define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then carefully reading the entire ...

  4. HDU 4352 XHXJ's LIS HDU(数位DP)

    HDU 4352 XHXJ's LIS HDU 题目大意 给你L到R区间,和一个数字K,然后让你求L到R区间之内满足最长上升子序列长度为K的数字有多少个 solution 简洁明了的题意总是让人无从下 ...

  5. 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 ...

  6. HDU 4352 XHXJ&#39;s LIS(数位dp&amp;状态压缩)

    题目链接:[kuangbin带你飞]专题十五 数位DP B - XHXJ's LIS 题意 给定区间.求出有多少个数满足最长上升子序列(将数看作字符串)的长度为k. 思路 一个数的上升子序列最大长度为 ...

  7. hdu 4352 "XHXJ's LIS"(数位DP+状压DP+LIS)

    传送门 参考博文: [1]:http://www.voidcn.com/article/p-ehojgauy-ot.html 题解: 将数字num字符串化: 求[L,R]区间最长上升子序列长度为 K ...

  8. HDU.4352.XHXJ's LIS(数位DP 状压 LIS)

    题目链接 \(Description\) 求\([l,r]\)中有多少个数,满足把这个数的每一位从高位到低位写下来,其LIS长度为\(k\). \(Solution\) 数位DP. 至于怎么求LIS, ...

  9. $HDU$ 4352 ${XHXJ}'s LIS$ 数位$dp$

    正解:数位$dp$+状压$dp$ 解题报告: 传送门! 题意大概就是港,给定$[l,r]$,求区间内满足$LIS$长度为$k$的数的数量,其中$LIS$的定义并不要求连续$QwQ$ 思路还算有新意辣$ ...

随机推荐

  1. Tree Recovery(前序中序求后序)

    Tree Recovery Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14640   Accepted: 9091 De ...

  2. 取值为[1,n-1]含n个元素的整数数组,至少存在一个重复数,即可能存在多个重复数,O(n)时间内找出其中任意一个重复数,不使用额外存储空间。

    有一种非常诡异的算法,就是采用类似于单链表是否存在环的问题.“判断单链表是否存在环”是一个非常经典的问题,同时单链表可以采用数组实现,此时每个元素值作为next指针指向下一个元素.本题可以转换化为“已 ...

  3. 06-Linux RPM 命令参数使用详解

    rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种.二进制包可以直接安装在计算机中,而源代码包将会由 RPM自动编译.安装.源代码包经常以src.rpm作为后缀名. 常用命令组 ...

  4. 利用广播实现ip拨号——示例

    1.创建activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi ...

  5. centos 7 安装 gcc-4.9.3.tar.gz

    由于编译新内核需要,更新了GCC编译器,自行获取文件,手动升级. 首先是获取文件:wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gc ...

  6. iOS开发--tarBarItem右上方显示badgeValue

    直接设置tabBarItem.badgeValue没有效果,找原因半天发现ViewController被NavigationViewController包着 需这样设置才行: self.navigat ...

  7. ubuntu 手动安装mysql

    申请了一台云主机,需要手动安装所有环境,今天将mysql安装过程记下. 安装mysqla. 下载不了gcc, 需要先运行apt-get updateb. cmake报错,每次要先删除cmakeCach ...

  8. 使用 urllib 处理 HTTP 异常

    (1) 我们发起 HTTP 请求,有时会发生异常,如请求超时,登录密码错误,请求链接不存在等等,使用 urllib.request.URLError 可以捕获这些与 URL 相关的异常(2) urll ...

  9. 流程控制与数组——Java疯狂讲义

    顺序结构 if分支语句      if{} 可以有多个else if{} else{} 可以省略 switch分支语句 while循环 do while循环 for循环 嵌套循环 控制循环结构 理解数 ...

  10. Android中的安全与访问权限控制

    Android是一个多进程系统,在这个系统中,应用程序(或者系统的部分)会在自己的进程中运行.系统和应用之间的安全性是通过Linux的facilities(工具,功能)在进程级别来强制实现的,比如会给 ...