题目没看懂想表达啥。。附上大神题解:
#2576 问题可以转化为求 2 * k 的所有切分,使最大的小于等于 k,用 DFS 可以生成出所有的组合。
然后我就照做了。。其实看sample的output也能看出点规律来。。DFS+回溯写了几道开始熟练起来了,哈哈,继续找找类似的
#include<stdio.h>
static int n, ans[20], total;
void print_partition()
{
putchar('{');
int i;
for (i = 0; i < total; i++)
printf(i ? ",%d" : "%d", ans[i]);
putchar('}');
putchar('\n');
}
void dfs2576(int depth)
{
int i;
for (i = 1; i <= n; i++)
{
if (total && i < ans[total - 1])
continue;
if (depth + i <= 2 * n)
{
ans[total++] = i;
if (depth + i == 2 * n)
print_partition();
else
dfs2576(depth + i);
total--;
}
}
}
int main()
{
while (scanf("%d", &n), n)
{
dfs2576(0);
putchar('\n');
}
return 0;
}