<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "Zosto zadacata nakit od navedeniot link ne pominuva so dinamicko programiranje"]]></title>
		<link>http://mendo.mk/jforum/posts/list/12.page</link>
		<description><![CDATA[Latest messages posted in the topic "Zosto zadacata nakit od navedeniot link ne pominuva so dinamicko programiranje"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Zosto zadacata nakit od navedeniot link ne pominuva so dinamicko programiranje</title>
				<description><![CDATA[ Zadacata Nakit od 2015 J Припреми ден 3 sto moze da se najde na ovoj link<br /> http://mendo.mk/algoritmi/Task.do?competition=150&id=255.<br /> <br /> Nemie jasna zosto pominuva so greedy resenie a so DP(dinamicko programiranje) resenie ne pominuva.<br /> <br /> Ova e resenieto za koe pominuva<br /> <br /> [code]#include &lt;iostream&gt;<br /> #include &lt;algorithm&gt;<br /> #include &lt;cmath&gt;<br />  <br /> using namespace std;<br />  <br /> int main() {<br />      <br />     int n;<br />      <br />     cin &gt;&gt; n;<br />      <br />     int a[n];<br />      <br />     for (int i = 0 ; i &lt; n ; i++){<br />         cin &gt;&gt; a[i];<br />     }<br />      <br />     sort(a, a + n);<br />      <br />     int sum1 = a[n - 1] , sum2 = a[n - 2];<br />      <br />      <br />      <br />     for (int i = n - 3 ; i &gt;= 0 ; i--){<br />         if (sum1 &lt; sum2){<br />             sum1 += a[i];<br />         }else {<br />             sum2 += a[i];<br />         }<br />     }<br />      <br />     cout &lt;&lt; min(sum1, sum2) &lt;&lt; " " &lt;&lt; max(sum1, sum2) &lt;&lt; endl;<br />      <br />     return 0;<br /> }[/code]<br /> <br /> a ova e resenieto kade sto pagja na runtime <br /> [code]#include &lt;iostream&gt;<br /> #include &lt;algorithm&gt;<br /> #include &lt;cmath&gt;<br /> #include &lt;climits&gt;<br />  <br /> using namespace std;<br /> <br /> int findMin(int arr[], int n, int sum){<br /> <br />     bool dp[n + 1][sum + 1];<br /> <br />     for (int i = 0; i &lt;= n; i++)<br />         dp[i][0] = true;<br /> <br />     for (int i = 1; i &lt;= sum; i++)<br />         dp[0][i] = false;<br /> <br />     for (int i = 1; i &lt;= n; i++){<br />         for (int j = 1; j &lt;= sum; j++){<br /> <br />             dp[i][j] = dp[i - 1][j];<br /> <br />             if (arr[i - 1] &lt;= j)<br />                 dp[i][j] |= dp[i - 1][j - arr[i - 1]];<br />         }<br />     }<br /> <br />     int diff = INT_MAX;<br />     <br />     for (int j = sum / 2; j &gt;= 0; j--){<br />     	<br />         if (dp[n][j]){<br />             diff = sum - 2 * j;<br />             break;<br />         }<br />     }<br />     <br />     return diff;<br /> } <br /> <br /> int main() {<br />      <br />     int n, sum = 0;<br />      <br />     cin &gt;&gt; n;<br />      <br />     int a[n];<br />      <br />     for (int i = 0 ; i &lt; n ; i++){<br />         cin &gt;&gt; a[i];<br />         sum += a[i];<br />     }<br />      <br />     int minVal = findMin(a, n, sum); <br /> 	<br /> 	int large = (sum + minVal) / 2;<br /> 	int small = large - minVal;<br /> <br />     cout &lt;&lt; small &lt;&lt; " " &lt;&lt; large &lt;&lt; endl;<br />      <br />     return 0;<br /> }[/code]<br /> <br /> Prasanjeto mi bese zosto zadacata e napravena samo da se resava so greedy approach a ne kako sto treba.<br /> Ova go sogledav koga vidov deka vo zadacata pisuva da se najdi optimalnoto resenie kade sto ke ima minimalna razlika pomegju dvete grupi od nakiti no za dolniot slucaj ako odime po greedy resenieto(za koe pominuva 10/10) ke bide<br /> 14 12 10 20 22 ====&gt; greedy (22 + 12 + 10 = 44  i 20 + 14 = 34 sto ke ispecati (34 44) no treba da bide (10 + 12 + 14 = 36    20 + 22 = 42 ) sto znaci pagja na ovoj slucaj no 10/10 pominuva na od MENDO slucaite sto ne mie jasno ....)<br /> dodeka so DP resenieto si pecati najoptimalnoto grupiranje  (36 42) no pagja na runtime za 4 slucai sto ne mie jasno zosto vaka e postavena zadacata.]]></description>
				<guid isPermaLink="true">http://mendo.mk/jforum/posts/preList/492/3191.page</guid>
				<link>http://mendo.mk/jforum/posts/preList/492/3191.page</link>
				<pubDate><![CDATA[Sun, 1 Oct 2017 04:29:44]]> GMT</pubDate>
				<author><![CDATA[ stoki97]]></author>
			</item>
			<item>
				<title>Re:Zosto zadacata nakit od navedeniot link ne pominuva so dinamicko programiranje</title>
				<description><![CDATA[ Задачата е наменета да се реши со динамичко програмирање, само што твоето решение го надминува меморискиот лимит (пресметај ги димензиите на dp матрицата и лесно ќе се увериш во тоа).<br /> За да се надмине овој проблем, клучно е да се увиди кои податоци [b]не[/b] треба да ги чуваме. За да пресметаме произволен елемент од матрицата dp[i][j], нас ни требаат само вредностите од редот i-1, сите останати редици не ни играат улога, од што може да се заклучи дека во еден момент нам ни е потребно да чуваме само [b]2[/b] редици од матрицата (претходната редица и таа што во сегашниот момент ја пресметуваме), што многу ни ја намалува меморијата.]]></description>
				<guid isPermaLink="true">http://mendo.mk/jforum/posts/preList/492/3192.page</guid>
				<link>http://mendo.mk/jforum/posts/preList/492/3192.page</link>
				<pubDate><![CDATA[Mon, 2 Oct 2017 14:02:08]]> GMT</pubDate>
				<author><![CDATA[ despotovski01]]></author>
			</item>
	</channel>
</rss>