Сочетания без повторения на N/40 раз. Создаешь динамический массив или вектор(хз на каком языке ты пишешь),и передаешь его в ф-ию ,которая меняет его в соответстиви с формулой сочетания.Типо while(sochetanie(arr,size)=true)
{
for(int i=0;i
{
if(arr[i]==1);
//прибавляем 40
if(arr[i]==2)
//прибавляем 55
if(sum>N(
//вычитаем последнее сложение
}
}