【发布时间】:2017-01-13 11:35:58
【问题描述】:
给定一组变量v(1) - v(k),函数f定义为f(v1,v2,...vk)。
目标是在给定v(1)+v(2)+....+v(k)=n 的情况下拥有一组最大化f 的v(i)。所有元素都限制为非负整数。
注意:我没有SAS/IML 或SAS/OR。
如果知道k,比如2,那么我可以这样做。
data out;
set in;
maxf = 0;
n1 = 0;
n2 = 0;
do i = 0 to n;
do j = 0 to n;
if i + j ne n then continue;
_max = f(i,j);
if _max > maxf then do;
maxf = max(maxf,_max);
n1 = i;
n2 = j;
end;
end;
end;
drop i j;
run;
但是,这个解决方案有几个问题。
使用循环似乎效率很低。
当 k 未知时,它不知道如何需要嵌套循环。
这正是“将 n 个球分配到 k 个容器中”的问题,其中 k 由具有特定前缀的数据 in 中的列数确定,n 由宏变量确定。
函数f是已知的,例如f(i,j) = 2*i+3*j;
这可以在数据步骤中完成吗?
【问题讨论】:
标签: sas