Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 5641 | Accepted: 3588 |
Description
Your job is to write a program that reads in the number k and the set S and then prints all possible games choosing numbers only from S.
Input
Output
Sample Input
7 1 2 3 4 5 6 7 8 1 2 3 5 8 13 21 34 0
Sample Output
1 2 3 4 5 6 1 2 3 4 5 7 1 2 3 4 6 7 1 2 3 5 6 7 1 2 4 5 6 7 1 3 4 5 6 7 2 3 4 5 6 7 1 2 3 5 8 13 1 2 3 5 8 21 1 2 3 5 8 34 1 2 3 5 13 21 1 2 3 5 13 34 1 2 3 5 21 34 1 2 3 8 13 21 1 2 3 8 13 34 1 2 3 8 21 34 1 2 3 13 21 34 1 2 5 8 13 21 1 2 5 8 13 34 1 2 5 8 21 34 1 2 5 13 21 34 1 2 8 13 21 34 1 3 5 8 13 21 1 3 5 8 13 34 1 3 5 8 21 34 1 3 5 13 21 34 1 3 8 13 21 34 1 5 8 13 21 34 2 3 5 8 13 21 2 3 5 8 13 34 2 3 5 8 21 34 2 3 5 13 21 34 2 3 8 13 21 34 2 5 8 13 21 34 3 5 8 13 21 34
Source
在玩德国游戏Lotto时,要从集合{1,2,……,49}中取出六个数。
一个非常流行的玩法(尽管这种玩法并不能增加你赢的机会)是从这49个数字中取出k个数字(6<k)组成子集S。然后玩游戏的时候仅从S中取出数字。
例如,当k=8,S=1,2,3,5,8,13,21,34时,有28种可能的游戏:
[1,2,3,5,8,13],[1,2,3,5,8,21],[1,2,3,5,8,34],[1,2,3,5,13,21],……,[3,5,8,13,21,34]。
编一个程序,读入k的值和集合S,打印仅从S中取数的所有可能游戏。
输入
输入文件包括一个或多个测试情形。
每种情形一行,由多个整数组成,整数之间用空格分隔。行首整数即为k值(6<k<13)。
接着是用于描述集合S的k个整数,全部以升序排列。
在k的位置输入零(0)即表示输入结束。
输出:
对于每一个测试情形,打印出所有可能游戏,每个游戏一行。
每个游戏中的数字必须以升序排列,每两个之间用一个空格分隔。而这些游戏要用类似于字典编纂的方式排序,也就是说,先对最低位排序,然后是第二低位,依次类推,就像输出举例中演示的那样。
按照一开始理解成按照字典序输出Ck6种情况就调用next_permutation()。把产生的数据与测试数据一对发现出大问题了。。。嗨。。题都没看懂就做题。去死只能感叹dfs的强大,这里都用的上啊
#include <cstring>
static const int MAXN = 15;
int a[MAXN], n;
int ans[MAXN];
void dfs(int index, int depth)//递归填充数并打印组合,相当于DFS过程
{
}
int main()
{
}