<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Knapsack-Problem (Rucksack-Problem)]]></title><description><![CDATA[<p>mein lösungsansatz funktioniert schon hab nur ein prob</p>
<pre><code class="language-cpp">int N=5;
item items[5];
int maxKnown[100];
String itemKnown[100];

int sack (int cap)
	{int i, space, max, maxi=0, t;
	 if (maxKnown[cap] != -1) return maxKnown[cap];
	 for (i = 0, max = 0; i &lt; N; i++)
		if ((space = cap - items[i].size) &gt;= 0)
			if ((t = sack(space) + items[i].val) &gt; max)
				{max = t; maxi=i;}
maxKnown[cap] = max; itemKnown[cap] = itemKnown[cap] + items[maxi].name;

//items[i].count=items[i].count+1;
return max;
</code></pre>
<p>N anzahl wie viele Sachen es gibt die in den rucksack können also es gibt 5 unterschiedliche<br />
cap größe des sacks<br />
items ist meine klasse mit den sachen die es gibt<br />
maxKnown[] speicher für den besten ermittelten wert<br />
itemKnown[] in das array soll reingespeichert werden welche items im sack sind</p>
<p>meine item klasse</p>
<pre><code class="language-cpp">class item
{public:	String name;
	int size;
	int val;
};
</code></pre>
<p>meine objekte</p>
<pre><code class="language-cpp">items[0].name=&quot;Würstchen&quot;;
items[0].size=3;
items[0].val=4;
items[1].name=&quot;Wodka&quot;;
items[1].size=4;
items[1].val=5;
items[2].name=&quot;Fanta&quot;;
items[2].size=7;
items[2].val=10;
items[3].name=&quot;Pringles&quot;;
items[3].size=8;
items[3].val=11;
items[4].name=&quot;Pinjata&quot;;
items[4].size=9;
items[4].val=13;
</code></pre>
<p>jetzt will ich wie oben gesagt in itemKnown immer die items speichern, die für die bestelösung, im sack sind</p>
<p>ich möchte für einen sack der 12 größ die besten lösung haben das sieht man auch so 1 pinjata und 1 würstchen das gibt dan einen wert von 17. das bekomme ich auch heraus. blos wenn ich mir as array angucke kommt dann folgendes raus:<br />
würstchen<br />
würstchen<br />
würstchen<br />
würstchen<br />
wodka<br />
wodka<br />
würstchen</p>
<p>pringles<br />
pinjata</p>
<p>würstchen</p>
<p>so die letzten 2 wären die richtige lösung sind aber die abstände dazwichen und gleih an pinjata pringles dran. kann mir da einer helfen das mit variabler größe das ich immer die richtigen items angezeigt bekomme und nicht immer alles bei denen er durchgegangen ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/135209/knapsack-problem-rucksack-problem</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 08:55:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/135209.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 31 Jan 2006 15:46:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Knapsack-Problem (Rucksack-Problem) on Tue, 31 Jan 2006 15:46:17 GMT]]></title><description><![CDATA[<p>mein lösungsansatz funktioniert schon hab nur ein prob</p>
<pre><code class="language-cpp">int N=5;
item items[5];
int maxKnown[100];
String itemKnown[100];

int sack (int cap)
	{int i, space, max, maxi=0, t;
	 if (maxKnown[cap] != -1) return maxKnown[cap];
	 for (i = 0, max = 0; i &lt; N; i++)
		if ((space = cap - items[i].size) &gt;= 0)
			if ((t = sack(space) + items[i].val) &gt; max)
				{max = t; maxi=i;}
maxKnown[cap] = max; itemKnown[cap] = itemKnown[cap] + items[maxi].name;

//items[i].count=items[i].count+1;
return max;
</code></pre>
<p>N anzahl wie viele Sachen es gibt die in den rucksack können also es gibt 5 unterschiedliche<br />
cap größe des sacks<br />
items ist meine klasse mit den sachen die es gibt<br />
maxKnown[] speicher für den besten ermittelten wert<br />
itemKnown[] in das array soll reingespeichert werden welche items im sack sind</p>
<p>meine item klasse</p>
<pre><code class="language-cpp">class item
{public:	String name;
	int size;
	int val;
};
</code></pre>
<p>meine objekte</p>
<pre><code class="language-cpp">items[0].name=&quot;Würstchen&quot;;
items[0].size=3;
items[0].val=4;
items[1].name=&quot;Wodka&quot;;
items[1].size=4;
items[1].val=5;
items[2].name=&quot;Fanta&quot;;
items[2].size=7;
items[2].val=10;
items[3].name=&quot;Pringles&quot;;
items[3].size=8;
items[3].val=11;
items[4].name=&quot;Pinjata&quot;;
items[4].size=9;
items[4].val=13;
</code></pre>
<p>jetzt will ich wie oben gesagt in itemKnown immer die items speichern, die für die bestelösung, im sack sind</p>
<p>ich möchte für einen sack der 12 größ die besten lösung haben das sieht man auch so 1 pinjata und 1 würstchen das gibt dan einen wert von 17. das bekomme ich auch heraus. blos wenn ich mir as array angucke kommt dann folgendes raus:<br />
würstchen<br />
würstchen<br />
würstchen<br />
würstchen<br />
wodka<br />
wodka<br />
würstchen</p>
<p>pringles<br />
pinjata</p>
<p>würstchen</p>
<p>so die letzten 2 wären die richtige lösung sind aber die abstände dazwichen und gleih an pinjata pringles dran. kann mir da einer helfen das mit variabler größe das ich immer die richtigen items angezeigt bekomme und nicht immer alles bei denen er durchgegangen ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982190</guid><dc:creator><![CDATA[Der Richter]]></dc:creator><pubDate>Tue, 31 Jan 2006 15:46:17 GMT</pubDate></item><item><title><![CDATA[Reply to Knapsack-Problem (Rucksack-Problem) on Tue, 31 Jan 2006 22:22:43 GMT]]></title><description><![CDATA[<p>Die Ausgabe ist nach dem Value im Sack geordnet. D.h. in der 17. Zeile sollte das Würstchen erscheinen und in der 12. die Pinjata. Es wird für jeden max. Sack-Wert (val) nur das erste (!) item gespeichert.<br />
Wenn Du als Ergebnis alle die Dinge haben möchtest, die in den Sack mit dem maximalen Wert passen, so musst Du den Inhalt im Return-Code mit zurückgeben, statt es global abzulegen. Das kann man z.B. in einer Liste von item's machen. Hier eine Alternative:</p>
<pre><code class="language-cpp">#include &lt;list&gt;
#include &lt;numeric&gt;      // accumulate
#include &lt;string&gt;       // string

struct AddVal
{
    int operator()( int sum, const item&amp; it )
    {
        return sum + it.val;
    }
};
std::list&lt; item &gt; sack2( int cap )
{
    int max_val = 0;
    std::list&lt; item &gt; maxi;
    for( item* i = items; i != items + sizeof(items)/sizeof(*items); ++i )
    {
        int space = cap - i-&gt;size;
        if( space &gt;= 0 )    // item '*i' passt in den Sack
        {
            std::list&lt; item &gt; t = sack2( space ); // liefert die item's mit max. Sack-Wert mit Sack-Größe 'space'
            const int t_val = std::accumulate( t.begin(), t.end(), i-&gt;val, AddVal() );
            if( t_val &gt; max_val )   // Sack hat größeres 'val' als max
            {
                max_val = t_val;
                t.push_front( *i ); // 1.Item noch hinzufügen
                maxi = t;
            }
        }
    }
    return maxi;
}
</code></pre>
<p>Die Liste, die von sack2( 12 ) erzeugt wird, enthält dann nur das Würstchen und die Pinjata.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982608</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 31 Jan 2006 22:22:43 GMT</pubDate></item><item><title><![CDATA[Reply to Knapsack-Problem (Rucksack-Problem) on Wed, 01 Feb 2006 01:06:36 GMT]]></title><description><![CDATA[<p>erst mal danke hab aber wegen folgendem prob keine ahnung</p>
<p>Kann man dawas machen kann den wert nicht in nem edit feld ausgeben<br />
[C++ Error] Unit1.cpp(91): E2034 Cannot convert 'std::list&lt;item,std::allocator&lt;item&gt; &gt;' to 'AnsiString'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982655</guid><dc:creator><![CDATA[Der Richter]]></dc:creator><pubDate>Wed, 01 Feb 2006 01:06:36 GMT</pubDate></item><item><title><![CDATA[Reply to Knapsack-Problem (Rucksack-Problem) on Wed, 01 Feb 2006 08:55:02 GMT]]></title><description><![CDATA[<p>Der Richter schrieb:</p>
<blockquote>
<p>Kann man dawas machen kann den wert nicht in nem edit feld ausgeben<br />
[C++ Error] Unit1.cpp(91): E2034 Cannot convert 'std::list&lt;item,std::allocator&lt;item&gt; &gt;' to 'AnsiString'</p>
</blockquote>
<p>Das passt besser ins VCL-Forum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982775</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 01 Feb 2006 08:55:02 GMT</pubDate></item><item><title><![CDATA[Reply to Knapsack-Problem (Rucksack-Problem) on Wed, 01 Feb 2006 08:55:12 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=403" rel="nofollow">HumeSikkins</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=2" rel="nofollow">VCL/CLX (Borland C++ Builder)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/982776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982776</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Wed, 01 Feb 2006 08:55:12 GMT</pubDate></item><item><title><![CDATA[Reply to Knapsack-Problem (Rucksack-Problem) on Wed, 01 Feb 2006 09:08:45 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Häng einfach c_str() an dein Listenelement an, dann klappts auch mit dem AnsiString.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/982792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/982792</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 01 Feb 2006 09:08:45 GMT</pubDate></item><item><title><![CDATA[Reply to Knapsack-Problem (Rucksack-Problem) on Wed, 01 Feb 2006 15:23:32 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>Häng einfach c_str() an dein Listenelement an, dann klappts auch mit dem AnsiString.</p>
</blockquote>
<p>sorry versteh ich nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/983145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/983145</guid><dc:creator><![CDATA[Der Richter]]></dc:creator><pubDate>Wed, 01 Feb 2006 15:23:32 GMT</pubDate></item><item><title><![CDATA[Reply to Knapsack-Problem (Rucksack-Problem) on Wed, 01 Feb 2006 15:30:18 GMT]]></title><description><![CDATA[<p>Hallo</p>
<pre><code class="language-cpp">string Test = &quot;A&quot;;
Edit-&gt;Text = Test.c_str();
</code></pre>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/983157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/983157</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 01 Feb 2006 15:30:18 GMT</pubDate></item><item><title><![CDATA[Reply to Knapsack-Problem (Rucksack-Problem) on Wed, 01 Feb 2006 17:14:22 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>Hallo</p>
<pre><code class="language-cpp">string Test = &quot;A&quot;;
Edit-&gt;Text = Test.c_str();
</code></pre>
<p>bis bald<br />
akari</p>
</blockquote>
<p>ok soviel versteh ich jetzt. hab jetzt mehre variationen ausprobiert aber brings nicht hin. wie lautet der code genau anhand des beispiels oben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/983305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/983305</guid><dc:creator><![CDATA[Der Richter]]></dc:creator><pubDate>Wed, 01 Feb 2006 17:14:22 GMT</pubDate></item><item><title><![CDATA[Reply to Knapsack-Problem (Rucksack-Problem) on Wed, 01 Feb 2006 17:39:56 GMT]]></title><description><![CDATA[<p>Das ist hier doch etwas anderes. Du hast die Strings ja schon im richtigen Format, willst also nur darauf zugreifen;<br />
Was willst du übrigens wohin speichern. In den obigen Quelltexten kommt kein Editfeld vor.<br />
Hast du jetzt eine list&lt;Item&gt;?<br />
Hier mal der Code zum Schreiben des ersten Eintrages in der list in ein Editfeld.</p>
<pre><code class="language-cpp">std::list&lt; item &gt; Items;
// jetzt die list anhand des Algorithmusses füllen
std::list&lt; item &gt;::iterator it = Items.begin();
Edit-&gt;Text = it-&gt;name;
</code></pre>
<p>oder mal zum Schreiben aller itemnamen in eine StringList</p>
<pre><code class="language-cpp">TStringList *list = new TStringList;
// Schleife durchläuft die Liste und fügt alle Einträge einer StringList zu
for(std::list&lt; item &gt;::iterator it = Items.begin(); it!=Items.end(); ++it)
   liste-&gt;Add(it-&gt;name);
// irgendwas mit der StringList machen
delete list; //löschen nicht vergessen
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/983326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/983326</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 01 Feb 2006 17:39:56 GMT</pubDate></item><item><title><![CDATA[Reply to Knapsack-Problem (Rucksack-Problem) on Wed, 01 Feb 2006 17:49:42 GMT]]></title><description><![CDATA[<p>ja de funktion sack2 hat ja am ende nen return maxi das würde ich gerne in nem edit feld ausgeben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/983333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/983333</guid><dc:creator><![CDATA[Der Richter]]></dc:creator><pubDate>Wed, 01 Feb 2006 17:49:42 GMT</pubDate></item></channel></rss>