题目大意

给出整数k和t,需要产生一个满足以下要求的第k个十六进制数

即十六进制数每一位上的数出现的次数不超过t

首先我们先这样考虑,如果给你了0~f每个数字可以使用的次数num[i],如何求长度为L且满足要求的十六进制数有多少个

dp[i][l]表示使用了前i个数字,已经将L的空位填上了l个的数有多少个

转移方程 dp[i][l] = sigma(dp[i-1][l-j]*C[len-l+j[j]) 其中j是枚举填新的数的个数,C是组合数(选出j个空位填上新数)

有了这个dp后,现在的问题就变成了找出第k个数

首先先确定位数,枚举位数,然后就可以找到第k个数的位数是多少

然后对从最高位开始枚举,确定每一位应该是多少

最后就可以得出答案

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long LL;
const int maxl = 200;
LL C[maxl][maxl], dp[16][maxl];
int num[16], t;
LL k;
void prepare()
{for(int i = 0; i < maxl; i++) C[i][0] = 1;for(int i = 1; i < maxl; i++)for(int j = 1; j <= i; j++)C[i][j] = C[i-1][j] + C[i-1][j-1];
}LL solve(int len)
{memset(dp, 0, sizeof(dp));for(int i = 0; i <= num[0]; i++) dp[0][i] = C[len][i];for(int i = 1; i < 16; i++)for(int l = 0; l <= len; l++)for(int j = 0; j <= min(num[i], l); j++)dp[i][l] += dp[i-1][l-j]*C[len-l+j][j];return dp[15][len];
}
void print(int j)
{if(j < 10) cout<<j;else cout<<(char)(j+'a'-10);
}
int main()
{prepare();cin>>k>>t;for(int i = 0; i < 16; i++) num[i] = t;int len = 1;for(;; len++){LL tmp = 0;if(len == 1) tmp = 15;elsefor(int j = 1; j < 16; j++){num[j]--;tmp += solve(len-1);num[j]++;}if(k > tmp) k -= tmp;else break;}for(int i = len; i > 0; i--){if(i == 1){for(int j = 0; j < 16; j++){if(j == 0 && len == 1) continue;if(num[j] != 0) k--;if(k == 0) { print(j); break; }}break;}for(int j = 0; j < 16; j++){if(i == len && j == 0) continue;num[j]--;LL tmp = solve(i-1);if(k > tmp) k -= tmp;else{print(j);break;}num[j]++;}}
}

转载于:https://www.cnblogs.com/Saurus/p/6208757.html

Codeforces Round #387 (Div. 2) 747F(数位DP)相关推荐

  1. Educational Codeforces Round 8 D. Magic Numbers 数位DP

    D. Magic Numbers 题目连接: http://www.codeforces.com/contest/628/problem/D Description Consider the deci ...

  2. Codeforces Round #131 (Div. 2) B. Hometask dp

    题目链接: http://codeforces.com/problemset/problem/214/B Hometask time limit per test:2 secondsmemory li ...

  3. Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS

    题目链接:https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意:一个长度为n的数组,数组的元素都在[L,R]之间,并且数组全 ...

  4. Codeforces Round #374 (Div. 2) C. Journey DP

    C. Journey 题目连接: http://codeforces.com/contest/721/problem/C Description Recently Irina arrived to o ...

  5. Codeforces Round #260 (Div. 1) A - Boredom DP

    点击打开链接 题意: 给你n个数,你每次可以选择删除去一个数x,但是等于x+1和等于x-1的数都得删去 你每一次操作可以得x分 思路一: dp[i]表示到i后能够得到的最大分数 dp[i]=max(d ...

  6. Codeforces Round #387 (Div. 2) A+B+C+D!

    A. Display Size 水题,暴力(数据都是水题).0:04 int main() {int n;while(~scanf("%d",&n)){int mi=n;i ...

  7. Codeforces Round #268 (Div. 1) C. Hack it! 数位dp + 构造数位

    传送门 文章目录 题意: 思路: 题意: 定义f(x)f(x)f(x)表示xxx的十进制下数位和,现在给你aaa,让你选一个区间[l,r][l,r][l,r],满足∑i=lrf(i)moda=0\su ...

  8. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

  9. Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp

    Codeforces Round #459 (Div. 2) C. The Monster 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以 ...

最新文章

  1. Access和CorelDRAW总结
  2. find name 模糊匹配_MYSQL关于find_in_set()函数的使用详解和like的区别之处
  3. 【论文解读】基于图卷积的价格感知推荐
  4. NumPy中的where()函数
  5. 咋样查mysql的url_eclipse用jdbc连接mysql数据库时,url是填什么?怎样找出地址?
  6. 测试题的答案(技术博客)
  7. mysql冷热数据LRU_浅析MySQL的lru链表
  8. python包导入详细教程脚本之家_python包导入详细教程脚本之家_Python使用import导入本地脚本及导入模块的技巧总结......
  9. 《深入浅出DPDK》学习思维导图
  10. javascript Date对象
  11. 如何安全地终止线程interrupt()、isInterrupted()、interrupted()的区别与使用
  12. android http上传,Android HttpClient上传文件(亲测,成功)
  13. MSVAR能用MATLAB做吗,MS-VAR模型(MSVAR)建模心得(干货)
  14. 计算机内存128毫升,内存换算公式(内存怎么换算)
  15. 一文读懂图像局部特征点检测算法!
  16. 安科瑞电气系统Acrel-2000在数据中心机房的应用及产品选型
  17. k8s命令对node调度 cordon,drain,delete 区别
  18. 如何构建企业内的 TiDB 自运维体系
  19. 大厂app出海攻略|一个方法让app推广变现能力双效提升
  20. JAVA —— 就业面面案例①(WEB综合案例)

热门文章

  1. 计算机关机键消失了,如何解决Windows7电脑中的关机键不见了
  2. php长按图片保存mui,Vue+mui实现图片的本地缓存
  3. 更改ftp服务器根文件夹,ftp服务器的主目录根文件夹
  4. Hibernate基于Maven入门实例,与MyBatis比对
  5. Weblogic Server 的下载,安装配置与部署
  6. java 代码压缩javascript_利用Java来压缩 JavaScript 代码详解
  7. flutter 微信语言选择_flutter实战项目,教你使用flutter打造微信app页面!
  8. 二维矩阵边界包围JAVA_Quart 2D 绘制图形简单总结
  9. datagrid传参_DataGrid里面要传两个参数怎么传
  10. UVALive - 6440