I - 邱老师选妹子(二)

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

邱老师长得帅这是人尽皆知,于是追他的妹子就会很多。但是你知道,邱老师是一个很专一的人,所以他心里面只能有一个人。于是他决定从追他的众多妹子里挑选一个出来。

在第一轮的选拔中,剩余了一些妹子。酱神又给邱老师出主意了,因为最近酱神刚刚学习了最长上升子序列,所以这次,依然是把妹子们编号,从l到r,一共r-l+1个,这次要求妹子的

编号按照字符来处理,使得最长上升子序列正好是k,比如123是3,321是1.

求剩下的妹子的个数

Input

一开始是一个整数t<=1000,表示的是数据组数,接下来t行,每行是l,r,k 0<l<=r<2^63-1 1<=k<=10

Output

每组数据输出占一行,为一个整数,表示剩下的妹子的个数

Sample input and output

Sample Input Sample Output
1
123 321 2
139

解题思路:

贪心维护最长上升子序列即可

f(i,f1,f2,f3,k)

i  -> 正在转移第 i 位

f1 -> 前面是否大于过下界

f2 -> 前面是否小于过上界

f3 -> 是否有前导0

k  -> 前面出现的数的集合 (贪心维护最大)

为什么这样是正确的呢?

我们考虑这样的数字 1 4 3

我们认为最长上升显然是 1 3 ,而不会考虑到1 4,这样可以保证不会遗漏解,故是正解的

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
typedef long long ll;
using namespace std; int tark,maxlen;
string A,B;
ll f[][][][][<<]; inline int GetLength(int k)
{
int len = ;
for(int i = ; i < ; ++ i)
if (k >> i & )
len++;
return len;
} inline int tanxinset(int k,int pos) //贪心维护
{
for(int i = pos ; i < ; ++ i)
if (k >> i & )
return (k & ~( << i) ) | ( << pos);
return k | ( << pos);
} ll dp(int cur,int f1,int f2,int f3,int k)
{
if (f[cur][f1][f2][f3][k] != -)
return f[cur][f1][f2][f3][k];
ll &ans = f[cur][f1][f2][f3][k] = ;
if (cur == maxlen)
{
int len = GetLength(k);
if (len == tark)
return ans = ;
else
return ans = ;
}
int st = f1?:A[cur]-'';
int ed = f2?:B[cur]-'';
for(int i = st ; i <= ed ; ++ i)
{
if (f3 && i == ) //拥有前导零,这个不算上升的
ans += dp(cur+, f1 | i > A[cur]-'' , f2 | i < B[cur]-'' , f3 & !i, );
else
ans += dp(cur+, f1 | i > A[cur]-'' , f2 | i < B[cur]-'' , f3 & !i, tanxinset(k,i) );
}
return ans;
} int main(int argc,char *argv[])
{
std::ios::sync_with_stdio(false);
std::cin.tie();
int Case;
cin >> Case;
while(Case--)
{
cin >> A >> B >> tark;
memset(f,-,sizeof(f));
maxlen = B.size();
while(A.size() != maxlen)
A = '' + A;
printf("%lld\n",dp(,,,,));
}
return ;
}

UESTC_邱老师选妹子(二) 2015 UESTC Training for Dynamic Programming<Problem I>的更多相关文章

  1. UESTC_菲波拉契数制 2015 UESTC Training for Dynamic Programming<Problem E>

    E - 菲波拉契数制 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  2. UESTC_秋实大哥掰手指 2015 UESTC Training for Dynamic Programming<Problem B>

    B - 秋实大哥掰手指 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 2048/1024KB (Java/Others) Submit ...

  3. UESTC_邱老师选妹子 2015 UESTC Training for Dynamic Programming<Problem H>

    H - 邱老师选妹子 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  4. UESTC_邱老师看电影 2015 UESTC Training for Dynamic Programming<Problem F>

    F - 邱老师看电影 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  5. UESTC_邱老师玩游戏 2015 UESTC Training for Dynamic Programming<Problem G>

    G - 邱老师玩游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  6. UESTC_酱神寻宝 2015 UESTC Training for Dynamic Programming<Problem O>

    O - 酱神寻宝 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  ...

  7. UESTC_导弹拦截 2015 UESTC Training for Dynamic Programming<Problem N>

    N - 导弹拦截 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  ...

  8. UESTC_酱神的旅行 2015 UESTC Training for Dynamic Programming<Problem M>

    M - 酱神的旅行 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit ...

  9. UESTC_菲波拉契数制升级版 2015 UESTC Training for Dynamic Programming<Problem L>

    L - 菲波拉契数制升级版 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Su ...

随机推荐

  1. linux下C和shell调用的popen函数

    说明:      本文介绍popen函数的使用方法和行为机理,并给出实际的例子来辅助说明了popen函数的使用方法. popen函数使用FIFO管道执行外部程序,首先让我们看看popen的函数原型吧: ...

  2. SCOI2014省选总结

    这一次省选,主要是抱着玩的心态去的,如同高二的那些大神高一的心态一样,只记得在省选之前我们一直在说,这一次我们的目标,就是不爆0,最后也如愿以偿的实现了. 首先,请允许我吐槽一下day1.....da ...

  3. hdu 5612 Baby Ming and Matrix games(dfs暴力)

    Problem Description These few days, Baby Ming is addicted to playing a matrix game. Given a n∗m matr ...

  4. python高级编程之选择好名称:pepe8和命名最佳实践

    # # -*- coding: utf-8 -*- # # python:2.x # __author__ = 'Administrator' # my_list=['a','b','c','d'] ...

  5. Linux下使用JNI的常见问题及解决方案

    JNI是java和C/C++混合编程的接口,可以很方便地实现java调用C/C++语言.具体的使用方法,网上有很多教程,在此不做过多介绍.本博客只关注在使用JNI的过程中的常见问题. 1.     生 ...

  6. 免费自学Cocos2d-x3.0final2014原创视频教程(56集)(适用于Cocos2d-x3.1 Cocos2d-x3.2版本号全)

    Cocos2d-x3.0final(适用于Cocos2d-x3.1 Cocos2d-x3.2版本号全) 视频播放地址:http://yun.itxdl.cn/course/62 视频下载地址:http ...

  7. linux重命名

    mv  A  B 将目录A重命名为B mv  /a  /b /c   将目录/a目录移动到/b下并重命名为c 其实在文本模式中要重命名文件或目录的话也是很简单的,我们只需要使用mv命令就可以了,比如说 ...

  8. 涂抹Oracle笔记1-创建数据库及配置监听程序

    一.安装ORACLE数据库软件及创建实例OLTP:online transaction processing 指那些短事务,高并发,读写频繁的数据库系统.--DB_BLOCK_SIZE通常设置较小.O ...

  9. C#winform修改IP,dns

     /// 将IP,DNS设置为自动获取        ///        private void setDHCP()        {            string  _doscmd = & ...

  10. Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.

    I have installed a Web application on IIS 7.0 windows server 2008 R2 64 bit OS I am refering a oracl ...