dp[i]+=dp[i-a];
dp[i]表示组成数 i 的方式的个数
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include <stdio.h>
2
3 int main()
4 {
5 int n,m,i,j,a;
6 long long dp[10005]={0};
7 scanf("%d%d",&n,&m);
8 dp[0]=1;
9 for (i=0;i<n;i++)
10 {
11 scanf("%d",&a);
12 for (j=a;j<=m;j++)
13 {
14 dp[j]+=dp[j-a];
15 }
16 }
17 printf("%lld\n",dp[m]);
18 return 0;
19 }