求正数数组内和为指定数字的组合总数
比如[5, 5, 10, 2, 3] 合并值为 15 :
有4种组合 : (5 + 10, 5 + 10, 5 + 5 + 2 + 3, 10 + 2 + 3)
只需输出组合总数即可,不需打印组合内容。
int fun(int a[], int n, int m)
{
int **buf = new int*[n];
for (int i = 0; i < n; i++)
{
buf[i] = new int[m+1];
}
for (int i = 1; i <= m; i++)
{
buf[0][i] = 0;
}
buf[0][0] = 1;
if (a[0] <= m)
{
buf[0][a[0]] = 1;
}
for (int i = 1; i < n; i++)
{
for (int j = 0; j <= m; j++)
{
buf[i][j] = buf[i-1][j];
if (j-a[i] >= 0)
{
buf[i][j] += buf[i-1][j-a[i]];
}
}
}
int result = buf[n-1][m];
for (int i = 0; i < n; i++)
{
delete []buf[i];
}
delete buf;
return result;
}