В зависимости от количества элементов, разница между реальностью и расчетным количеством может накапливаться. Поэтому лучше это делать при построении страниц. К тому же алгоритм практически одинаков.
Добавлено через 23 минуты
Наверняка не самый лучший вариант, но на скорую руку...

Код AS3:
var h:int = 8;
var arr = [2,4,5,3];
var list:int=0;
arr.sort(Array.DESCENDING);
getList();
function getList():void{
if(arr.length==0){
trace("length", list);
return;
}
if(arr[0]>h){
list++;
arr.shift();
}else{
if(arr.length==2){
arr.pop();
}else{
if(arr.length>1){
for(var i:int=arr.length - 1; i>1; i--){
if(arr[0]+arr[i]==h || (arr[0]+arr[i]>h && i!=arr.length - 1)){
arr.splice(i, 1);
break;
}
}
}
}
arr.shift();
list++;
}
getList();
}