奇妙的题。

你先得会另外一个nlogn的LIS算法。(我一直只会BIT。。。。。)

然后维护下每个数码作为结尾出现过没有就完了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
long long t,l,r,k,ret=,bit[];
struct pnt
{
long long k[];
}dp[][<<];
void reset()
{
for (long long i=;i<=;i++)
for (long long j=;j<(<<);j++)
for (long long k=;k<=;k++)
dp[i][j].k[k]=-;
}
void get_bit(long long x)
{
ret=;
while (x) {bit[++ret]=x%;x/=;}
}
long long bit_cnt(long long x)
{
long long ret=;
while (x) {if (x&) ret++;x>>=;}
return ret;
}
long long get_sets(long long sets,long long x)
{
if (sets&(<<x)) return sets;
sets|=(<<x);
for (long long i=x+;i<=;i++)
{
if (sets&(<<i))
{
sets^=(<<i);
return sets;
}
}
return sets;
}
pnt comb(pnt x,pnt y)
{
for (long long i=;i<=;i++)
x.k[i]+=y.k[i];
return x;
}
pnt dfs(long long pos,long long sets,bool flag)
{
if (!pos)
{
long long now=bit_cnt(sets);pnt ret;
for (long long i=;i<=;i++)
{
if (i==now) ret.k[i]=;
else ret.k[i]=;
}
return ret;
}
if ((!flag) && (~dp[pos][sets].k[])) return dp[pos][sets];
pnt ans;long long up=flag?bit[pos]:;
for (long long i=;i<=;i++) ans.k[i]=;
for (long long i=;i<=up;i++)
ans=comb(ans,dfs(pos-,get_sets(sets,i),flag&&i==up));
if (!flag) dp[pos][sets]=ans;
return ans;
}
long long ask(long long x)
{
if (!x) return ;
get_bit(x);long long ans=;
for (long long i=;i<=ret-;i++)
for (long long j=;j<=;j++)
ans+=dfs(i-,<<j,).k[k];
for (long long j=;j<=bit[ret]-;j++)
ans+=dfs(ret-,<<j,).k[k];
ans+=dfs(ret-,<<bit[ret],).k[k];
return ans;
}
void work(long long x)
{
scanf("%lld%lld%lld",&l,&r,&k);
printf("Case #%lld: %lld\n",x,ask(r)-ask(l-));
}
int main()
{
scanf("%lld",&t);reset();
for (long long i=;i<=t;i++) work(i);
return ;
}

HDU 4352 XHXJ's 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 HDU(数位DP)

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

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

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

  5. hdu 4352 XHXJ's LIS (数位dp+状态压缩)

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

  6. HDU 4352 XHXJ's LIS HDU 题解

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

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

    Problem Description #define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then carefull ...

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

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

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

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

随机推荐

  1. (转) cocos2dx 显示中文

    cocos2dx 中文显示 分类: cocos2dx 2014-01-18 10:31 253人阅读 评论(0) 收藏 举报 目录(?)[+] 总结一句话,就是UTF-8编码. 1. 中文FNT字体文 ...

  2. QT笔记之VS开发程序遇到的问题

    转载:http://www.cnblogs.com/li-peng/p/3644812.html 转载:http://www.cnblogs.com/csuftzzk/p/VS_Qt_Experien ...

  3. RPM安装rabbitMQ

    系统使用的是centos 7 - minimal 建立用户和组: # groupadd rabbitmq # useradd rabbitmq -g rabbitmq 在安装rabbitMQ之前需要先 ...

  4. Scrum Meeting 5-20151207

    任务安排 姓名 今日任务 明日任务 困难 董元财 将服务器转移到学校服务器 修复app特定情况下崩溃 无 胡亚坤 学习连接服务器框架 发布界面和购买界面 无 刘猛 在github上分配好任务 写博客 ...

  5. js中面向对象

    1.对象的表示方法,以下是对象的两种方法:第二种方法是使用函数构造器来创建一个对象. 2.对象的一种表达方式,这种方式更像Java中对象的创建,就是用一个new来创建一个对象实例.面向对象的封装.样式 ...

  6. 对Objective-C相关的类、方法、属性、成员变量介绍

    类的定义@interface FirstClass :NSObject@end//@interface表示声明的是一个类,“:”表示继承关系,@end类的结束类的实现@implementation F ...

  7. android 5.0 水波纹 实现

    1. 定义一个普通圆角背景的xml; rounded_corners.xml <?xml version="1.0" encoding="utf-8"?& ...

  8. JavaScript基础(慕课)

    1. JavaScript函数: function 函数名() { 函数代码;//完成特定功能的代码. }PS:函数定义好后,是不能自动执行的,所以需调用它,只需直接在需要的位置写函数就ok了 2.  ...

  9. 如何搭建一个linux服务器

    1, 首先 下载一个linux server 系统镜像 ubuntu 64bit下载 http://www.ubuntu.com/download/server/thank-you/?version= ...

  10. python练习题代码

    1.打印出相应规则的字母 zm='ABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> for i in range(0,len(zm)): if i==0:  print ...