[HDU4352]XHXJ's LIS

题目大意:

\(T(T\le10000)\)组询问,每次给出\(l,r,k(l\le r\le 2^{63},k\le10)\),求若将数字看成一个字符串,有多少个\([l,r]\)中的数满足LIS为\(k\)。

思路:

\(f_{i,j,k}\)表示考虑前\(i\)位,LIS中数的状态为\(j\),长度为\(k\)的方案数。数位DP即可。非边界情况可以记忆化搜索。

源代码:

#include<cstdio>
#include<cctype>
#include<cstring>
typedef long long int64;
inline int64 getint() {register char ch;while(!isdigit(ch=getchar()));register int64 x=ch^'0';while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');return x;
}
const int D=20;
int k,dig[D];
int64 f[D][1<<10][11];
inline int upd(const int &s,const int &x) {for(register int i=x;i<10;i++) {if((s>>i)&1) return s^(1<<i)^(1<<x);}return s^(1<<x);
}
int64 dp(const int &dep,const bool &zero,const bool &lim,const int &s) {if(dep==0) return __builtin_popcount(s)==k;if(!lim&&f[dep][s][k]!=-1) return f[dep][s][k];int64 ret=0;for(register int i=0;i<=(lim?dig[dep]:9);i++) {ret+=dp(dep-1,zero&&(i==0),lim&&(i==dig[dep]),(zero&&(i==0))?0:upd(s,i));}if(!lim) f[dep][s][k]=ret;return ret;
}
inline int64 calc(int64 n) {for(dig[0]=0;n;n/=10) {dig[++dig[0]]=n%10;}return dp(dig[0],true,true,0);
}
int main() {const int T=getint();memset(f,-1,sizeof f);for(register int i=1;i<=T;i++) {const int64 l=getint(),r=getint();k=getint();printf("Case #%d: %lld\n",i,calc(r)-calc(l-1));}return 0;
}

转载于:https://www.cnblogs.com/skylee03/p/9727499.html

[HDU4352]XHXJ's LIS相关推荐

  1. 【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 ...

  2. HDU 4352 XHXJ's LIS(*数位DP 记忆化搜索 待整理)

    XHXJ's LIS HDU - 4352 #define xhxj (Xin Hang senior sister(学姐))  If you do not know xhxj, then caref ...

  3. hdu 4352 XHXJ's LIS

    题意: 先定义一个数的power value,把这个数看成一个字符串,他的最长上升子序列的长度就是他的power value,求某个区间内power value等于k的数的个数. 解法: 很显然要数位 ...

  4. HDU 4352 XHXJ#39;s LIS(数位dpamp;状态压缩)

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

  5. kuangbin带你飞专题合集

    题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...

  6. 动态规划总结与题目分类

    源博客链接:http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少 ...

  7. 『ACM-算法-动态规划』初识DP动态规划算法

    一.多阶段决策过程的最优化问题 在现实生活中,有类活 动的过程,由于 它的特殊性,可将过程分成若干个互相阶段.在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果.当阶段决策的选取不是任意确 ...

  8. 算法学习经典例题整理

    陆续会对本篇博客进行更新! 搜索:https://vjudge.net/contest/292597 区间DP:https://vjudge.net/contest/293892 树状背包:https ...

  9. (转)dp动态规划分类详解

    dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...

  10. 《动态规划》— 动态规划分类

    动态规划(英语:Dynamic programming,DP)是一种在数学.计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法. 动态规划常常适用于有重叠子问题和最 ...

最新文章

  1. java修改数据库表结构_数据库设计(一):设计传统系统表结构(Java开发)
  2. vsftp 添加虚拟帐号
  3. 从证书中导出公钥并存放到项目中
  4. Android开发的第一天
  5. window下python2和python3的共存
  6. 在学校外边找了份工作
  7. 如何在PR中同步音频和视频
  8. jensen不等式(jensen不等式对于凹函数)
  9. ftp文件下载工具,三个非常好使的ftp文件下载工具
  10. PHP上传视频到阿里云oss
  11. 「好书推荐」那些精彩的引人深思、充满反转的推理小说推荐
  12. 英语作业介绍一项发明计算机,计算机专业英语第1次作业.doc
  13. 机器学习40讲-12正则化处理:收缩方法与边际化
  14. c#跳出循环break与continue
  15. fastadmin介绍
  16. Docker Swarm nginx 集群搭建
  17. ccleaner中文版下载
  18. 2016计算机考研大纲视频,2016年考研专业课计算机大纲详解:操作系统
  19. tomcat页面显示404
  20. 如何检测计算机病毒并做成ppt,计算机病毒-ppt-4行为检测.ppt

热门文章

  1. 寻找二值图像的连通域算法分析
  2. 作业车间调度问题特征与调度效率相关性的研究Correlation of job-shop scheduling problem features with scheduling efficiency
  3. VC++ 求绝对值函数
  4. 奥威尔:老大哥在看着你-软件公司十诫
  5. Python爬虫Scrapy入门
  6. Python爬取豆瓣电影
  7. matlab的conv2、imfilter、filter2
  8. JS学习总结(5)——循环语句
  9. html5有哪些优点,HTML5真正的优势优点有什么?
  10. 利用Docker学习Redis笔记(一)