没有合适的资源?快使用搜索试试~ 我知道了~
算法训练3-51
需积分: 0 0 下载量 21 浏览量
2022-08-08
18:50:43
上传
评论
收藏 31KB DOCX 举报
温馨提示
试读
13页
满足条件的3位4进制数:111、113、130、131 、133、200、 202、 203、220、 222、300、 302、 303、311、 313、3
资源详情
资源评论
资源推荐
算法训练 3-5
3 算法训练 K 好数
问题描述
如果一个自然数 N 的 K 进制表示中任意的相邻的两位都不是相邻的数字,那么我们就
说这个数是 K 好数。求 L 位 K 进制数中 K 好数的数目。例如 K = 4,L = 2 的时候,所有 K
好数为 11、13、20、22、30、31、33 共 7 个。由于这个数目很大,请你输出它对
1000000007 取模后的值。
输入格式
输入包含两个正整数,K 和 L。
输出格式
输出一个整数,表示答案对 1000000007 取模后的值。
样例输入
4 2
样例输出
7
数据规模与约定
对于 30%的数据,K
L
<= 10
6
;
对于 50%的数据,K <= 16, L <= 10;
对于 100%的数据,1 <= K,L <= 100。
题目分析:
1 理解”L 位 K 进制数中的 K 好数 的数目”
K 进制数,取值范围为[0,K-1]; “L 位 K 进制数”,如:“2 位 4 进制
数”、 “3 位 7 进制数”;要求是任意相邻的两位不是相邻的数字。
2 “由于数很大……输出取模后的值”这一条件?
在数据规范与约定中,我们知道 1 K 100,1 L 100。假设 K=100,
L=100,即 100 位 100 进制数中 100 好数的情况下,它的数目约就有 100
100
,肯
定超过了 int,long long。所以通过取模来减小运算量。
3 举例分析 “2 位 4 进制数”和“3 为 4 进制数”
满足条件的 2 位 4 进制数:11、13 、20 、22 、 30、 31、 33,共 7 个。
满足条件的 3 位 4 进制数:111、113、130、131 、133、200、 202、 203、
220、 222、300、 302、 303、311、 313、330、 331、 333,共 18 个。
解题思路 1:
1 使用动态规划,通过组合子问题的解来求解原问题。
2 用 F[i][j]表示长为 i,最后一位数字是 j 的 K 好数的个数,则
F[i][j]= F[i][j]+sum F[i-1][k],其中|j-k|!=1。
当前位置的数总数=当前位置的数的数目+前一个位置的数的总数。
i j
0
1
2
3
…
100
0
1 0
1
1
1
1
2
2
1
2
2
5
4
3
6
…
100
解题思路 2:
在 F[i][j]中,i 代表所在的位数(i=0 代表个位,i=1 代表十
位,以此类推)。j 代表取 K 进制数的一个数(如果是 4 进制数,那
么 j 取[0,3]中的一个数)。F[i][j]表示当前位置的数 K 好数的个
数,则 F[i][j]= F[i][j]+sum F[i-1][k],其中|j-k|!=1。
i j
0
1
2
3
…
100
0
1
1
1
1
1
3
2
2
3
2
8
5
5
8
…
100
参考代码:
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int k,l;
cin>>k>>l;
long long table[100][100];
for(int i=0;i<k;i++)
{ table[0][i]=1ll;
}
table[0][0]=0ll;
for(int i=1;i<l;i++)
{ for(int j=0;j<k;j++)
{
long long x=0;
for(int y=0;y<k;y++)
{
if(y!=j+1 && y!=j-1)
{
x+=table[i-1][y];
}
剩余12页未读,继续阅读
耄先森吖
- 粉丝: 59
- 资源: 293
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- EDA实验课设-基于FPGA设计的洗衣机控制器quartus工程Verilog源码+课设文档报告.zip
- ffmpeg2.tar.gz
- layer.open弹出框加载时间选择器
- EDA实验课设-基于FPGA设计的智能电梯控制器设计quartus工程Verilog源码+课设文档报告.zip
- 51单片机驱动LCD1602+LCD12864+OLED(IIC)
- logstash-7.17.18.tar.gz
- C# E2Pose人体关键点检测(OpenVINO推理).rar 源码
- (Python3项目开发)AI智能联系人管理系统
- From Nand to Tetris (I) on Coursera
- VHDL是VHSIC Hardware Description Language的缩写,全称是Very High Speed I
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0