洛谷p1036-选数
题解一:
此题是从n个数中选出k个不同的数字出来,然后按要求计算,看k个数的和有多少个数素数。
思考一下,无非难点就是,如何在n个数字中取出k个不同的数字,且不能重复。这里不能重复,一是说取出的数字不能相同,二是说取得方案不能重复。比如:
4 3
3 7 12 19
是说4个数字中取出3个数字,可以这样取
3 7 12
3 7 19
3 12 19
7 12 19
但是不能这样取:
3 3 7之类,
也不能这样取:
3 7 12
3 7 19
3 7 19
3 12 19
7 12 19
即:一组内不能有相同得数字,且不能有相同得两组。
好了,重点是:如何去重!
如果我们有规律得枚举,就能有效得避免重复列举得出现。也即达到了去重得目的。
我们要这样:
3 7 12
3 7 19
3 12 19
7 12 19
这样取,第一个位置,先取最小得数字3,后面递增取出。第一个位置选择为3得排列选完了,那么:第一个位置换为第二小得数字,再进行排列。即选7排列。
这样枚举,就有秩序了。
题解思路是用dfs,和上述文章中提到得降重得方法。
其中startx参数是用来储存当前升序排序时的初始值。
1 |
|