题目

LCP 25. 古董键盘

小扣在秋日市集购买了一个古董键盘。由于古董键盘年久失修,键盘上只有 26 个字母 a~z 可以按下,且每个字母最多仅能被按 k 次。

小扣随机按了 n 次按键,请返回小扣总共有可能按出多少种内容。由于数字较大,最终答案需要对 1000000007 (1e9 + 7) 取模。

示例 1:

输入:k = 1, n = 1输出:26解释:由于只能按一次按键,所有可能的字符串为 "a", "b", ... "z"

示例 2:

输入:k = 1, n = 2输出:650解释:由于只能按两次按键,且每个键最多只能按一次,所有可能的字符串(按字典序排序)为 "ab", "ac", ... "zy"

提示:

1 <= k <= 5
1 <= n <= 26*k

题解

动态规划:

  • 用dp[i][j]表示长度为i,使用前j个字母能按出的字串总数。假设第j个字母按了x次(x取值范围为0~k),那么:

    C(i, x)表示i个位置中选择x个位置有多少种方式。
  • C(n,m)计算方式:

C++代码

#include <bits/stdc++.h>
using namespace std;using ll = long long;
const ll mod = 1000000007;class Solution {public:int keyboard(int k, int n) {vector<vector<ll>> dp(n + 1, vector<ll>(27, 0L));for (int j = 0; j <= 26; ++j) {dp[0][j] = 1;}for (int i = 1; i <= n; ++i) {for (int j = 1; j <= 26; ++j) {for (int x = 0; x <= k; ++x) {if (i >= x) {dp[i][j] += dp[i - x][j - 1] * C(i, x);}}dp[i][j] %= mod;// cout << i << "," << j << ":" << dp[i][j] << endl;}}return dp[n][26];}ll C(int n, int m){ll fz = 1;ll fm = 1;for (int i = n; i >= n - m + 1; --i) {fz *= i;}for (int j = m; j >= 2; --j) {fm *= j;}return fz / fm;}
};

Leetcode-LCP 25. 古董键盘相关推荐

  1. 【LeetCode系列】LCP 25. 古董键盘(一道动态规划困难题)

    ⭐️前面的话⭐️ 本篇文章将介绍力扣上的一道题[LCP 25. 古董键盘]的题解,标签:动态规划,多重背包问题,展示语言为Java.

  2. 使用switch-case来实现银行存款问题 计算存款利息。有N元,想存M年。有3种方法可选: (1)活期,年利率为r1 0.36% (2)一年期定期,年利率为r2 2.25% 从键盘获取存款年

    #include <stdio.h>int main() /* 使用switch-case来实现银行存款问题 计算存款利息.有N元,想存M年.有3种方法可选: (1)活期,年利率为r1 0 ...

  3. ⭐算法入门⭐《二分枚举》简单15 —— LeetCode LCP 18. 早餐组合

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   小扣在秋日市集选择了一 ...

  4. LeetCode——LCP 29. 乐团站位[简单]——分析及代码(Java)

    LeetCode--LCP 29. 乐团站位[简单]--分析及代码[Java] 一.题目 二.分析及代码 1. 直接计算 (1)思路 (2)代码 (3)结果 三.其他 一.题目 某乐团的演出场地可视作 ...

  5. LeetCode 651. 4键键盘(DP,Ctrl+CV)

    文章目录 1. 题目 2. 解题 1. 题目 假设你有一个特殊的键盘包含下面的按键: Key 1: (A):在屏幕上打印一个 'A'.Key 2: (Ctrl-A):选中整个屏幕.Key 3: (Ct ...

  6. LeetCode LCP 07. 传递信息 / NC111 最大数 / NC16 判断二叉树是否对称 / NC13 二叉树的最大深度

    祝我党百年华诞生日快乐 LCP 07. 传递信息 2021.7.1 每日一题 题目描述 小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下:有 n 名玩家,所有玩家编号分别为 0 - n-1 ...

  7. 【每日算法/刷穿 LeetCode】25. K 个一组翻转链表(困难)

    题目描述 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序. 示例: ...

  8. leetcode - LCP 42. 玩具套圈 -二分 -坐标映射 -区间查找 - 坐标范围快速查找

    文章目录 解法1 - 给定圈,找套中的玩具 - 超时 解法 2 - 给定玩具找能套中它的圈 - 超时 解法 3 解法2的基础上加入 二分查找区间 - 通过 解法4 - 解法2的基础上 映射x的同时映射 ...

  9. LeetCode LCP 34. 二叉树染色(树上DP)

    文章目录 1. 题目 2. 解题 1. 题目 小扣有一个根结点为 root 的二叉树模型,初始所有结点均为白色,可以用蓝色染料给模型结点染色,模型的每个结点有一个 val 价值. 小扣出于美观考虑,希 ...

最新文章

  1. CentOS 8 已是绝版?还有后续么?
  2. 【代数结构】群 ( 群的定义 | 群的基本性质 | 群的证明方法 | 交换群 )
  3. linux打开sqlite3数据库,Centos6.5中如何用sqlite3命令打开’.db’后缀的数据库执行sql...
  4. Http / Put 和 Post 区别
  5. linux如何编译php扩展,linux环境下编译php扩展
  6. Java Spring源代码学习之How is class annotation evaluated by Spring framework
  7. mysql 5.5主从同步_MySQL5.5+配置主从同步并结合ThinkPHP5设置分布式数据库
  8. 使用一个命令执行单个Java源文件
  9. 【HISI系列】之H264/H265/JPEG切帧方法
  10. linux环境变量如何设置
  11. C++设计模式10--命令模式(一)--降低请求发送者与接收者耦合
  12. c#开发之八---mvc
  13. 详解十三款运维监控工具
  14. linux制作flash软件,Linux 下的三款 Flash 独立播放器
  15. UmiJS介绍--快速上手(一)
  16. java中final类调用_Java中final的使用
  17. 【实战项目惜时App项目总结分析】Vue-cli3+Vant UI+Vue-element-admin+Egg.js+Mysql
  18. Busting Frame Busting
  19. 1419 最小公倍数挑战(素数性质之两两互质 与 取“3”个数的特殊性)
  20. 2020扁皮筋排名_2020年高性价比弹弓推荐,(12月)弹弓选购攻略

热门文章

  1. Ubuntu20.04安装CUDA+CUDNN+Conda+PyTorch
  2. mapstruct使用指南(2)
  3. 是非人生 — 一个菜鸟程序员的5年职场路 第28节
  4. 借用该函数验证哥德巴赫猜想:任意一个大的偶数都可以分解成两个素数之和。
  5. 带按扭的轮换横幅广告
  6. 使用FastJson进行驼峰下划线相互转换写法及误区
  7. 主数据治理项目实施中存在的问题
  8. 《炬丰科技-半导体工艺》氢氟酸中玻璃湿法化学蚀刻的综述
  9. A星(AStar)算法的实现
  10. 阿里开发者工具盘点:用它!让开发事半功倍