作者forestfire ( 让 爱 重 生)
看板EzHotKey
标题[AHK-] 排列组合暴力解小问题
时间Wed Apr 14 18:31:11 2021
https://drive.google.com/drive/u/0/folders/1Fms0CflpSkAy4GChb098KmC_lHFWQHjL
2021/04/14 初版
排列组合暴力解的Lib,详情见连结
6个lib
1.n型
即跑出[1~3,1~4,1~5]的2D阵列
n1问题:从digits阵列中重复取数字,最後小於n值
2.c型
即c几取几的排列组合的2D阵列
(左边数小於右边的数)
C1问题:i值差k以内且v值差t以内,若有符合回传true
i2v从排列组合得i,转成nums的v值
C2问题:怎样拿取得最多,筛选排列组合符合条件,最大值怎麽写
3.p型
即数学p的排列组合,12345全跑这种
若要1234 ~ 4321这种,先c在p
p1问题:求出经过abcd四点之间的最短距离
4.h型
即数学h的排列组合
x+y+z=10
x>=1
y>=1
z>=1
H1问题:字母加起来等於某个值,使用add跑法即跑到符合就中断(其它c、n也有add跑法)
5.selfClone
将数列复制一样的数目,并从後面加新值
此范例靠本来最後一个值 +1 +0 -1
6.F_Array
阵列的lib
请放在路径一
C:\Program Files\AutoHotkey\Lib\
或请放在路径二
C:\Program Files (x86)\AutoHotkey\lib
依系统有所区别
--
其中一个范例
nums := [2,7,9,3,1,10]
len:=nums.length()
max=0
ayr:=[]
for i,v in CaddReturnAyAll(nums.length(),nums.length()//2+1)
{
sum=0
if Filter(v) ;筛选阵列,留下想要的值
{
for i2,v2 in v
sum+= nums[v2]
if (max<sum)
{
max:=sum
ayr:=v
}
}
}
;ayr 取得nums的i位置
pay2data(ayr,"最大值为" max)
return
#include <F_Array>
#include c.ahk
Filter(ay){
loop % ay.length()-1
if (ay[a_index]+1)==(ay[A_index+1])
return false
return true
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.227.220.213 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/EzHotKey/M.1618396273.A.431.html
1F:推 Sylph: 推 04/15 23:17
※ 编辑: forestfire (59.115.12.11 台湾), 05/08/2021 16:33:06
※ 编辑: forestfire (59.115.12.11 台湾), 05/08/2021 16:34:17