1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
|
public static bool test(int betrag, int[] zahlen)
{
int B = betrag;
int n = zahlen.GetLength(0);
//Nun das Array erstellen mit den Werten von 0..B, also mit B+1 Elementen
bool[] teilsumme = new bool[B + 1];
for (int i = 0; i <= B; i++)
{
teilsumme[i] = false;
}
//Die 0 ist ja trivial darstellbar
teilsumme[0] = true;
for (int i = 0; i < n; i++)
{
for (int b = B; b >= 0; b--) //von oben nach unten
{
if (b - zahlen[i] >= 0) //wichtig ist hier auch die überprüfung mit = 0
{
if (teilsumme[b - zahlen[i]])
{
teilsumme[b] = true;
}
}
}
}
return teilsumme[betrag];
}
|