火柴-(递推关系)

本文探讨了如何利用n根火柴棍组成非负整数的问题,重点在于分析递推关系。例如,3根火柴可以组成1或7,4根火柴可以组成1、7、4和11等。通过观察,当i根火柴可以组成一个数字时,增加一位数会形成新的数字组合,如i=3组成7,再加5变成53。文章提出用d(i)表示i根火柴可以表示的整数个数,并推导出递推公式d[i+c[j]]+=d[i],其中j从0到9进行遍历,揭示了火柴棍组合的数学规律。

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

例题描述
用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;
	int ans=
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值