1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4
5 using namespace std;
6
7 int dp[302], ans[302];//dp[i]表示钱数到达i的方法个数;
8 int n, c[10], cnt;
9 //利用动态规划的思想来解题;
10 int main()
11 {
12 int j, i, k, tem;
13 while (scanf ("%d%d", &n, &cnt) != EOF)
14 {
15 memset (dp, 0, sizeof (dp));
16 memset (ans, 0, sizeof (ans));
17 for (i = 0;i < cnt;i++) scanf ("%d", &c[i]);
18 for (i = 0;i <= n;i += c[0]) ans[i] = 1;
19 for (i = 1;i < cnt;i++)
20 {
21 for (j = 0;j <= n;j++)
22 {
23 for (k = 0;k + j <= n;k += c[i])
24 dp[k + j] += ans[j];
25 }
26 for (j = 0;j <= n;j++) ans[j] = dp[j], dp[j] = 0;//每一次循环后都要重新赋值,避免重复;
27 }
28 printf ("%d\n", ans[n]);
29 }
30 }