帮帮兄弟我求算法
今天遇见了一题目,也许论坛里兄弟们都遇见过了 但是小弟愚昧 想不出来 帮帮兄弟我吧1, 1--40个数
2, 在里面找i,j,k,l 任意4个数
3, 满足条件:第一:i,j,k,l各不相等。 第二:i,j,k,l 这4个数相互加减可以得到1--40里面任何一个数
例如:假如i=1,j=2,k=3,l=4
j-i=1
k-i=2
l-i=3
k+i=4
l+i=5
l+j=6
l+k=7
l+i+k=8
l+k+i+j=9
.
.
但是11就表示不出来了··所以不能为1 2 3 4..
只能用加减 随便怎么加 怎么减 只能这4个数之间···
兄弟们帮帮忙··感激中··
.
哪位兄弟帮下忙啦 你找燕子和孔明问问...他们对算法很感兴趣 [tk01]
好··谢谢啦 HJin的算法造诣很深。。不过他都是用洋文说话。。。 直接枚举(搜索),为提高效率,可考虑:
1.搜索时保证i<j<k<l,这样可以将效率提高许多
2.搜索时保证i+j+k+l>=40,否则减枝
3.搜索时保证l-k-j-i<40,否则减枝 设i,i+1,j,k是四个数。
设(a,b,c,d)其中每个元素的取值为(-1,0,1)。用向量(a,b,c,d)和(i,i+1,j,k)相乘就可得出标准表示式,然后再比较 楼上正解 刚才算了一下,
40C4 * (4C1 * 2^0 + 4C2 * 2^1 + 4C3 * 2^2 +4C4 * 2^3)
恰好=40
所以可以有一个非常强的剪枝条件,就是任意的组合算出的数和之前的组合算出的数都不重复
页:
[1]
