Necesito un pequeño programa

Alejandro
12 de Mayo del 2004
Necesito un programa que de un conjunto de números dados (hasta 100) muestre los subconjuntos cuya suma sea una determinada.
Os lo agradezco de verdad porque me urge.
Mi jefe quiere que saque, de un montón de facturas de una empresa, las que fueron destinadas a amortización, y como me lo tenga que hacer a huevo, me paso las vacaciones encerrado. Muchas gracias.

noel solw
12 de Mayo del 2004
Por una casualidad tengo este programa hecho en recursion.
No se me ocurre pensar cuanto tiempo tardara en correrara N = 100 !

// program k7b11.CPP - page 132
// written in Borland CPP ver 3.1

#include <conio.h>
#include <iostream.h>
#include <iomanip.h>

#define MAX 6

int a[MAX] = {2,3,7,9,12,15},
p[MAX] = {1,1,1,1,1,1},
b = 24,
sum = 0;

void ShowArray()
{
if(sum)
cout << setw(20) << sum;
else
cout << setw(20) << "given array";
cout << " ---> ";
for(int i = 0;i < MAX;i++)
if(p[i])
cout << setw(6) << a[i];
cout << endl;
} // SHOW ARRAY

void Process(int index)
{
if(sum == b)
{
ShowArray();
return;
}
if(index == MAX || sum > b)
return;
for(int i = index;i < MAX;i++)
{
sum += a[i];
p[i] = 1;
Process(i+1);
sum -= a[i];
p[i] = 0;
}
} // PROCESS

void main()
{
clrscr();
cout << "recursion : for a given array 'a' and a number 'b' find"
<< " a sub array " << endl << " such that sum(a) = b."
<< endl << endl;
ShowArray();
cout << endl;
for(int i = 0;i<MAX;i++)
p[i] = 0;
Process(0);
cout << endl << "end of program - good bye ! ! !" << endl;
getch();
} // MAIN