【例题描述】
用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