UESTC_邱老师选妹子(二) 2015 UESTC Training for Dynamic Programming<Problem I>
I - 邱老师选妹子(二)
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
邱老师长得帅这是人尽皆知,于是追他的妹子就会很多。但是你知道,邱老师是一个很专一的人,所以他心里面只能有一个人。于是他决定从追他的众多妹子里挑选一个出来。
在第一轮的选拔中,剩余了一些妹子。酱神又给邱老师出主意了,因为最近酱神刚刚学习了最长上升子序列,所以这次,依然是把妹子们编号,从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 |
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>的更多相关文章
- UESTC_菲波拉契数制 2015 UESTC Training for Dynamic Programming<Problem E>
E - 菲波拉契数制 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_秋实大哥掰手指 2015 UESTC Training for Dynamic Programming<Problem B>
B - 秋实大哥掰手指 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 2048/1024KB (Java/Others) Submit ...
- UESTC_邱老师选妹子 2015 UESTC Training for Dynamic Programming<Problem H>
H - 邱老师选妹子 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_邱老师看电影 2015 UESTC Training for Dynamic Programming<Problem F>
F - 邱老师看电影 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_邱老师玩游戏 2015 UESTC Training for Dynamic Programming<Problem G>
G - 邱老师玩游戏 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_酱神寻宝 2015 UESTC Training for Dynamic Programming<Problem O>
O - 酱神寻宝 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- UESTC_导弹拦截 2015 UESTC Training for Dynamic Programming<Problem N>
N - 导弹拦截 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- UESTC_酱神的旅行 2015 UESTC Training for Dynamic Programming<Problem M>
M - 酱神的旅行 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- UESTC_菲波拉契数制升级版 2015 UESTC Training for Dynamic Programming<Problem L>
L - 菲波拉契数制升级版 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Su ...
随机推荐
- 商派shopex
http://www.shopex.cn/48release/shopexsingle_exper.php 在线体验 前台体验:http://demo.shopex.com.cn/485 后台体验:h ...
- 北京Uber优步司机奖励政策(12月3日)
用户组:人民优步(适用于12月3日) 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://w ...
- python练习linux下创建路径
#coding=utf-8 import os class MakeDirectory(): def mkdir(self,path): # 去除首位空格 path=path.strip() # 去除 ...
- Oracle安装基本步骤
安装数据库 .建立用户组及用户 groupadd oinstall groupadd dba groupadd oper useradd -g oinstall -G dba oracle passw ...
- CLR via C# - Char_String
.NET中Char表示为16为的Unicode值,Char提供两个public const字段MinValue('\0',写成'\u0000'也是一样的)和MaxValue('\uffff'). Ch ...
- 《JavaScript 闯关记》之原型及原型链
原型链是一种机制,指的是 JavaScript 每个对象都有一个内置的 __proto__ 属性指向创建它的构造函数的 prototype(原型)属性.原型链的作用是为了实现对象的继承,要理解原型链, ...
- AngularJS Directive - 开场小介绍(转)
Directive其实就是让html变得更强大的一种方法.它可以根据需求对dom变形,或注入行为. 觉得它很神秘么,其实一点儿也不神秘,只要开始使用AngularJS了,就一定在使用着Directiv ...
- 关于asp:login控件和验证码的问题?(转)
1.验证码页面添加.2.将这验证码页面添加到login控件中:拖曳一Login控件,将之切换到模式下,在Html源文件中在表格中密码那行后添加: <tr> <td style= ...
- XtraReport改变纸张方向
XtraReport纸张方向改变可以通过修改Landscape属性: Landscape=true 为横向输出 Landscape=false 为纵向输出
- C++单链表的创建与操作
链表是一种动态数据结构,他的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素.链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结 ...