题意:求区间L到R之间的数A满足A的的数位的最长递增序列的长度为K的数的个数。

链接:点我

该题的关键是记录LIS的状态,学习过nlogn解法的同学都知道,我们每次加入的元素要和前面的比对替换,这里就用了这个方法

比如1 3 6,用二进制表示为001000101,假如新加入的数为2,那么我们枚举比2大的数,观察是否存在,这里找到3,我们把3替换成2,状态变成1,2,6

不懂的童鞋可以看这里的nlogn的介绍:点我

还有就是注意前导0

 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
#define MOD 1000000007
typedef long long ll;
const int INF=0x3f3f3f3f;
const double eps=1e-;
#define cl(a) memset(a,0,sizeof(a))
#define ts printf("*****\n");
const int MAXN=;
int n,m,tt,K;
ll dp[][<<][];
int digit[];
int k;
ll getst(ll s,ll u,ll& xx) // 状态转移
{
ll i,ss;
for(i=u;i<;i++)
{
if(s&(<<i)) break ; //有比u大的,替换掉
}
if(i<)
{
ss=s^(<<i);
ss=ss^(<<u);
}
else //没有比u大的,u放入s中
{
xx++;
ss=s^(<<u);
}
return ss;
}
ll dfs(int p,ll s,ll len,int fl,bool e) { //位置,lis状态,lis长度,前导0
if (p==-) return len==k;
if (!e &&dp[p][s][k]!=-) return dp[p][s][k];
ll res = ;
int u=e?digit[p]:;
for (int i=;i<=u;++i)
{
ll ns,nlen=len;
if(fl==&&i==) ns=;
else ns=getst(s,i,nlen);
res+=dfs(p-,ns,nlen,fl||i!=,e&&i==u);
}
return e?res:dp[p][s][k]=res;
}
ll solve(ll n)
{
int len=;
while(n)
{
digit[len++]=n%;
n/=;
}
return dfs(len-,,,,);
}
int main()
{
int i,j;
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
scanf("%d",&tt);
int ca=;
memset(dp,-,sizeof(dp));
while(tt--)
{
ll l,r;
scanf("%I64d%I64d%I64d",&l,&r,&k);
ll ans=solve(r)-solve(l-);
printf("Case #%d: %I64d\n",++ca,ans);
}
}

最新文章

  1. perl学习之路2
  2. jquery常用代码
  3. Android Studio 引入Lambda表达式
  4. RSYNC--数据迁移、备份
  5. activity_main.xml与fragment_main.xml
  6. cellspacing cellpadding
  7. VB热点答疑(2016.5.11更新Q4、Q5)
  8. hibernate spring 事务配置
  9. 运行第一个Hadoop程序,WordCount
  10. 【Vbox】centos虚拟机安装usb网卡驱动
  11. Mac 使用 OpenMP/Clang
  12. jumpserver篇--安装
  13. WCF 寄宿Windows以及控制台启动
  14. Python全栈之路----常用模块----os模块
  15. imp-oracle10g数据库dmp导入到11g数据库提示IMP-00058,表或试图不存在
  16. golang 爬虫
  17. prometheus的agent 二次开发代码参考
  18. JS正则验证邮箱的格式(转)
  19. (转)【多媒体封装格式详解】--- AAC ADTS格式分析
  20. 什么是TensorFlow Serving

热门文章

  1. Android 搭建Linux系统
  2. Hbuilder连接第3方模拟器(夜神)
  3. notepad++突然崩溃,保存的文件没了怎么办
  4. 使用showplan.sql分析sql Performance
  5. apache2启动失败(Failed to start The Apache HTTP Server.)解决方案
  6. Linux-Load Average解析(转)
  7. HDU 6194 string string string 2017沈阳网络赛 后缀数组
  8. php 全文搜索解决方法
  9. oracle中的符号含义
  10. 《跟老齐学Python Django实战》读后感