Leetcode-LCP 25. 古董键盘
题目
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. 古董键盘相关推荐
- 【LeetCode系列】LCP 25. 古董键盘(一道动态规划困难题)
⭐️前面的话⭐️ 本篇文章将介绍力扣上的一道题[LCP 25. 古董键盘]的题解,标签:动态规划,多重背包问题,展示语言为Java.
- 使用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 ...
- ⭐算法入门⭐《二分枚举》简单15 —— LeetCode LCP 18. 早餐组合
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 小扣在秋日市集选择了一 ...
- LeetCode——LCP 29. 乐团站位[简单]——分析及代码(Java)
LeetCode--LCP 29. 乐团站位[简单]--分析及代码[Java] 一.题目 二.分析及代码 1. 直接计算 (1)思路 (2)代码 (3)结果 三.其他 一.题目 某乐团的演出场地可视作 ...
- LeetCode 651. 4键键盘(DP,Ctrl+CV)
文章目录 1. 题目 2. 解题 1. 题目 假设你有一个特殊的键盘包含下面的按键: Key 1: (A):在屏幕上打印一个 'A'.Key 2: (Ctrl-A):选中整个屏幕.Key 3: (Ct ...
- LeetCode LCP 07. 传递信息 / NC111 最大数 / NC16 判断二叉树是否对称 / NC13 二叉树的最大深度
祝我党百年华诞生日快乐 LCP 07. 传递信息 2021.7.1 每日一题 题目描述 小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下:有 n 名玩家,所有玩家编号分别为 0 - n-1 ...
- 【每日算法/刷穿 LeetCode】25. K 个一组翻转链表(困难)
题目描述 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序. 示例: ...
- leetcode - LCP 42. 玩具套圈 -二分 -坐标映射 -区间查找 - 坐标范围快速查找
文章目录 解法1 - 给定圈,找套中的玩具 - 超时 解法 2 - 给定玩具找能套中它的圈 - 超时 解法 3 解法2的基础上加入 二分查找区间 - 通过 解法4 - 解法2的基础上 映射x的同时映射 ...
- LeetCode LCP 34. 二叉树染色(树上DP)
文章目录 1. 题目 2. 解题 1. 题目 小扣有一个根结点为 root 的二叉树模型,初始所有结点均为白色,可以用蓝色染料给模型结点染色,模型的每个结点有一个 val 价值. 小扣出于美观考虑,希 ...
最新文章
- CentOS 8 已是绝版?还有后续么?
- 【代数结构】群 ( 群的定义 | 群的基本性质 | 群的证明方法 | 交换群 )
- linux打开sqlite3数据库,Centos6.5中如何用sqlite3命令打开’.db’后缀的数据库执行sql...
- Http / Put 和 Post 区别
- linux如何编译php扩展,linux环境下编译php扩展
- Java Spring源代码学习之How is class annotation evaluated by Spring framework
- mysql 5.5主从同步_MySQL5.5+配置主从同步并结合ThinkPHP5设置分布式数据库
- 使用一个命令执行单个Java源文件
- 【HISI系列】之H264/H265/JPEG切帧方法
- linux环境变量如何设置
- C++设计模式10--命令模式(一)--降低请求发送者与接收者耦合
- c#开发之八---mvc
- 详解十三款运维监控工具
- linux制作flash软件,Linux 下的三款 Flash 独立播放器
- UmiJS介绍--快速上手(一)
- java中final类调用_Java中final的使用
- 【实战项目惜时App项目总结分析】Vue-cli3+Vant UI+Vue-element-admin+Egg.js+Mysql
- Busting Frame Busting
- 1419 最小公倍数挑战(素数性质之两两互质 与 取“3”个数的特殊性)
- 2020扁皮筋排名_2020年高性价比弹弓推荐,(12月)弹弓选购攻略