zyb的面试

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 695    Accepted Submission(s): 254

Problem Description
今天zyb参加一场面试,面试官听说zyb是ACMer之后立马抛出了一道算法题给zyb:
有一个序列,是1到n的一种排列,排列的顺序是字典序小的在前,那么第k个数字是什么?
例如n=15,k=7, 排列顺序为1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9;那么第7个数字就是15.
那么,如果你处在zyb的场景下,你能解决这个问题吗?
 
Input
T组样例(T<=100)
两个整数n和k(1<=n<=1e6,1<=k<=n),n和k代表的含义如上文
 
Output
输出1-n之中字典序第k小的数字
 
Sample Input
1
15 7
 
Sample Output
15
 
Source
 
 
思路:见代码
#include<cstdio>
#include<algorithm>
using namespace std;
int dis[];//把n分解
int cnt,len,ans,k,n;
bool lg1;
int ws[];//判断每一位都取值时最终的值是否可能超过n
int dp[];//取到底的记忆化
int les[];//不取到底的记忆化(当前值已经大于n并且还没到底,就返回了)
int dfs(int pos,int sum,int po){//sum*po为当前值,ws[pos]为上界,
if(sum*po<ws[pos]&&dp[pos]!=-&&(cnt+dp[pos]<k)){//当找的范围还在k内
cnt+=dp[pos];//当当前值小于上界时,就记忆化每一位都取的情况
return dp[pos];
}
else if(sum*po>ws[pos]&&les[pos]!=-&&(cnt+les[pos]<k)){
cnt+=les[pos];//当当前值大于上界,就记忆化至少有一位不选的情况(当至少有一位没取时可以保证
return les[pos];//最后得到的值一定小于n
}
int sum2=cnt;
int sum1=;
if(sum<=n){//当当前值满足条件时
sum1++;
cnt++;
if(cnt==k){
ans=sum;
lg1=false;
return ;
}
}
else
return ;
if(pos==)
return sum1;
for(int i=;i<=&&lg1;i++){//往下走
sum1+=dfs(pos-,sum*+i,po/);
}
//printf("%d %d\n",sum*po,ws[pos]);
if(sum*po<ws[pos])//当没有到上界
dp[pos]=sum1;
else if(sum*po>ws[pos])//当到上界
les[pos]=cnt-sum2;
return sum1;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
cnt=;
scanf("%d%d",&n,&k);
len=;
fill(dp,dp+,-);
fill(les,les+,-);
int m=n;
int po=;
while(m){
po*=;
dis[++len]=m%;
m/=;
}
int r=;
int summ=;
for(int i=;i<len;i++){
summ+=dis[i]*r;
ws[i]=n-summ;
r*=;
}
lg1=true;
for(int i=;i<=&&lg1;i++){
dfs(len-,i,po/);
}
printf("%d\n",ans);
}
return ;
}

hdu6468(记忆化搜索)的更多相关文章

  1. [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索

    1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...

  2. 【BZOJ-3895】取石子 记忆化搜索 + 博弈

    3895: 取石子 Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 263  Solved: 127[Submit][Status][Discuss] D ...

  3. hdu3555 Bomb (记忆化搜索 数位DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  4. zoj 3644(dp + 记忆化搜索)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 思路:dp[i][j]表示当前节点在i,分数为j的路径条数,从 ...

  5. loj 1044(dp+记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26764 思路:dp[pos]表示0-pos这段字符串最少分割的回文 ...

  6. DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects

    题目传送门 题意:训练指南P250 分析:DFS记忆化搜索,范围或者说是图是已知的字串构成的自动机图,那么用 | (1 << i)表示包含第i个字串,如果长度为len,且st == (1 ...

  7. HDU1978 记忆化搜索

    How many ways Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  8. bzoj4562: [Haoi2016]食物链--记忆化搜索

    这道题其实比较水,半个小时AC= =对于我这样的渣渣来说真是极大的鼓舞 题目大意:给出一个有向图,求入度为0的点到出度为0的点一共有多少条路 从入读为零的点进行记忆化搜索,搜到出度为零的点返回1 所有 ...

  9. 数位dp/记忆化搜索

    一.引例 #1033 : 交错和 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an  ...

  10. poj3592 强连通+记忆化搜索

    题意:有一片 n*m 的矿地,每一格有矿.或这传送门.或者挡路岩石.除了岩石不能走以外,其他的格子都能够向右或向下走,走到一个非岩石的格子.对于每一个矿点,经过它就能得到它的所有矿石,而对于每一个传送 ...

随机推荐

  1. Dijkstra+Heap模板

    普通Dijkstra: void DijkstraPath(int v0,int vis[],int dist[],int path[]) { int onePath[maxn]; int d; in ...

  2. vue的事件对象

    事件对象: v-on:click/mouseover 简写:     @click=""   @click="show($event)" <input t ...

  3. 1.JUC锁的一些概念

    原文链接:http://blog.csdn.net/zteny/article/details/54859228 接下来的几篇文章都转自这里,冒犯之处,多多包涵 原子性: 在看原子性之前,我们先看看什 ...

  4. Java 函数调用是传值还是传引用? 从字节码角度来看看!

    原文地址:点击打开

  5. Python基础Day8

    一.内容回顾 列表的存储:列表里的元素存储的是值的内存地址,就算通过copy,复制后容器里的值也是指向同一个内存地址(跟驻留机制有关) l1 = [1,2,3, l2 = l1.copy() 浅cop ...

  6. [dev][ipsec][distributed] strongswan如何做热迁移/高可用/High Availability

    问题描述: 原生的基于kernel 的 strongswan 如何做高可用,HA,High Availability 问题分析: 基于我们已知的,ipsec,strongswan的知识.问题分解如下: ...

  7. Linux VPS搭建蚂蚁笔记Leanote私有云笔记存储平台

    一.基础环境LNMP 安装nginx: yum install epel-release -y yum install nginx -y # 启动 nginx systemctl start ngin ...

  8. Python语言程序设计:Lab4

    Programming 1.Analysing a Text File Look at the file xian_info.txt which is like this: Xi'an China 8 ...

  9. springboot ElasticSearch 简单的全文检索高亮

    原文:https://segmentfault.com/a/1190000017324038?utm_source=tag-newest 首先引入依赖 <dependency> <g ...

  10. 2016年第六届蓝桥杯C/C++程序设计本科B组决赛 ——一步之遥(填空题题)

    一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里.矿车停在平直的废弃的轨道上.他的面前是两个按钮,分别写着“F”和“B”. 小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退.按F,会 ...