URAL - 1009 简单DP..新的开始...

本文介绍了解决URAL平台上的一个动态规划问题的方法。该问题要求计算特定条件下K进制数的总数,避免相邻的零出现。文章给出了递推公式并提供了一个C++实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天把POJ水到300了....狐狸大牛推荐URAL....这一向就到这里做题去...( 瞻仰小媛大牛 )...

URAL的DP分类的第一题....水水更健康..这完全是递推了...没啥要比较的..直接更新...

假设现在要求长度为 N 的 K 进制数中符合条件数的总数 ( 题目意思符合条件就是N位K进制数..没有两个零相连..没有前导零 )

dp [ n ] = ( k -1 ) * ( dp [ k - 1 ] ) + ( k - 1 ) * ( dp [ k - 2 ] ) ....

这么理解..就是说N位可以在所有N-1位的基础上前面添加一位不为零的也就是 ( k-1 )个可添加的数..再加上 ( N - 1 ) 位为 0 的...也就是( k - 1 ) * ( dp [ k - 2 ] )个...

初始化..dp[ 1 ] = k -1 ( 除0不行所以是 k-1 个 ) dp[2] = k*(k-1)


#include<iostream> #include<stdio.h> using namespace std; long long dp[21]; int n,k,i; int main() { while(~scanf("%d%d",&n,&k)) { dp[1]=k-1; dp[2]=(k-1)*k; for (i=3;i<=n;i++) dp[i]=(k-1)*(dp[i-1]+dp[i-2]); printf("%lld\n",dp[n]); } return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值