#include <stdio.h>
#include <cstring>int map[12];
int ans[12];
int n, m, p;
bool flag;//x是map的起始下标,y是ans的起始下标
void DFS(int x, int sum, int y)
{
if(sum > n)
return;
if(sum == n)
{
for(int i = 0; i < y; i++)
{
if(i == 0)
printf("%d", ans[i]);
else
printf("+%d", ans[i]);
}
printf("\n");
flag = true;
}
for(int i = x; i < m; i++)
{
ans[y] = map[i];
DFS(i+1, sum+ans[y], y+1);
while(i+1 < m && map[i] == map[i+1] )
i++;
}
}int main()
{
while(~scanf("%d%d", &n, &m) && n != 0)
{
memset(ans, 0, sizeof(ans));
flag = false;
for(int i = 0; i < m; i++)
scanf("%d", &map[i]);
printf("Sums of %d:\n", n);
DFS(0, 0, 0);
if(!flag)
printf("NONE\n");
}
return 0;
}
06-07
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交