N: =100:#以获得(1)。。a(否)
A: =矢量(N):
A类:= [$[1..5]:=<($1.5]:)>:
禁止:={6}:
对于从6到的n200N个做
forb:={};
c: =最小值({$A[n-1]+1::max(最大值(禁止)+1,A[n-1]+1)}减去禁止);
A[n]:=c;
ds:=转换(映射(t->c-t,A[4..n-1],集合);
如果ds={},则下一个fi;
对于 我ds公司:=ds公司 从横断 转换(地图(t吨-> (c(c)-t吨)/4,A类[1 到 ..n个-5 做4]),设置);
如果ds={},则下一个fi;
一 ds公司:=ds公司 横断 转换(地图(t吨-> (c(c)-t吨)/三,A类[我];2..n个-三]),设置);
如果ds={},则下一个fi;
日期:=ds公司 横断 转换(选择(`>`,地图(`-`,A类[我+1..n个(t吨-> (c(c)-4],一), (t吨)/2,A类[三..n个-1]-一)/5),2]),设置);
如果ds={},则下一个fi;
ds:=ds相交转换(映射(t->(t-a)/4,a[i+4..n-1]),集合);
如果ds={},则下一个fi;
ds:=ds相交转换(映射(t->(t-a)/3,a[i+3..n-2]),集合);
如果ds={},则下一个fi;
ds:=ds相交转换(映射(t->(t-a)/2,a[i+2..n-3]),集合);
如果ds={},则下一个fi;
forb:=forb联合映射(t->a+5*t,ds);
日期:
如果forb={},则mf:=0,否则mf:=最大(forb)fi;
c: =最小值({$A[n-1]+1..最大值(mf+1,A[n-2]+1)}减去b);
A: =[op(A),c];
禁止:=选择(`>`,禁止,c)联合映射(`+`,ds,c);
转换(A类; # _,列表); # _罗伯特·伊斯雷尔(Robert Israel),2016年1月4日
|