火柴-(递推关系)

例题描述
用n(1<=n<=2 000)根火柴棍能组成多少个非负数整数?火柴不必用完,组成的整数不能有前导(但整数0是允许的)。比如,若你有三

根火柴则可以组成1或者7;如果有4根,除了可以组成1和7之外,还可以组成4和11。

分析:比已经使用过的火柴i看成一个状态,该 i 根火柴已经组成了个数字。我们再在它的最高位再加一位数,比如已知i=3,他组成7一个数

字,(这里所说的组成是正好组成没有剩余)再加一个5得到数字53,这时组成它的火柴数就变为 c[5]+i;(c[i]表示数字i需要c[i]根火柴),我

们发现计算得到的火柴数和c[2]+i,c[3]+i,具有同样的值,所以该火柴数可以表示1+1+1(i根火柴只能表示一个整数)我们把这一映射用 d(i)

表示i根火柴可以表示的整数的个数。推导出公式为 d[i+c[j]]+=d[i]。而j需要从0~9的遍历一波。

#include<iostream>
#include<cstring>
using namespace std;

const int maxn=1000+10;
int main()
{
   
	int n
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值