UVA 10498 Happiness (linear Programming)
Last Update:2015-10-30
Source: Internet
Author: User
<span id="Label3"></p><p><p>Test instructions: n Food m individuals, known for each food unit price, everyone to eat each food happy value, each Person's happy value limit, to spend money to buy food the maximum value;</p></p><p><p>Idea: linear programming, available standard form, bring into the template;</p></p><p><p>The standard form is a set of equations composed of inequalities, and the relaxation form is a group of equations composed of equations;</p></p><p><p>An inequality, with a value greater than or equal to or less than or equal to, an inequality to an equation, with the addition of a variable, the new variable greater than the zero expression;</p></p><pre>#include <iostream><span style="color: #000000;"><span style="color: #000000;">#include</span></span><cstdio><span style="color: #000000;"><span style="color: #000000;">#include</span></span><math.h><span style="color: #0000ff;"><span style="color: #0000ff;">using</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">namespace</span></span><span style="color: #000000;"><span style="color: #000000;">std;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Const</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>dinf=<span style="color: #000000;"><span style="color: #000000;">1e10;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Const</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>max=<span style="color: #800080;"><span style="color: #800080;"></span> -</span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">n,m,b[max],n[max];</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">a[max][max],b[max],c[max],v;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">ans[max];</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>Sgn<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">x) { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(x>1e-<span style="color: #800080;"><span style="color: #800080;">8</span></span>)<span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span> <span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(x<-1e-<span style="color: #800080;"><span style="color: #800080;">8</span></span>)<span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span>-<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span> <span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">;}</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">Init () {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">i,j; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(i=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; I<=n;i++) n[i]=<span style="color: #000000;"><span style="color: #000000;">i; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(i=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; I<=m;i++) b[i]=n+<span style="color: #000000;"><span style="color: #000000;">i; V</span></span>=<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">;}</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>Pivot<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>L<span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>E<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">main element, input slack linear programming</span></span><span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">i,j; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>temp=<span style="color: #000000;"><span style="color: #000000;">a[l][e]; b[l]</span></span>/=temp; a[l][e]=<span style="color: #800080;"><span style="color: #800080;">1</span></span>/<span style="color: #000000;"><span style="color: #000000;">temp; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(i=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; I<=n;i++)<span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(i!=e) A[l][i]/=<span style="color: #000000;"><span style="color: #000000;">temp; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(i=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; I<=m;i++)<span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(i!=<span style="color: #000000;"><span style="color: #000000;">L) {b[i]</span></span>-=a[i][e]*<span style="color: #000000;"><span style="color: #000000;">b[l]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(j=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; J<=n;j++)<span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(j!=e) a[i][j]-=a[i][e]*<span style="color: #000000;"><span style="color: #000000;">a[l][j]; a[i][e]</span></span>=-a[i][e]/<span style="color: #000000;"><span style="color: #000000;">temp; } v</span></span>+=b[l]*<span style="color: #000000;"><span style="color: #000000;">c[e]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(i=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; I<=n;i++)<span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(i!=e) c[i]-=c[e]*<span style="color: #000000;"><span style="color: #000000;">a[l][i]; c[e]</span></span>*=-<span style="color: #000000;"><span style="color: #000000;">a[l][e]; Swap (b[l],n[e]);}</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>Simplex ()<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">simplex method, input standard type linear programming</span></span><span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">i,j,k,x; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">l,s; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">temp,temp1,temp2,temp3; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> while</span>(<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">) {TEMP2</span></span>=-dinf; s=-<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(i=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; I<=n;i++)<span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(SGN (c[i) ><span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">) {temp</span></span>=<span style="color: #000000;"><span style="color: #000000;">dinf; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(k=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; K<=m;k++)<span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(SGN (a[k][i) ><span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">) {temp3</span></span>=b[k]/<span style="color: #000000;"><span style="color: #000000;">a[k][i]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(temp3<temp) temp=temp3,x=<span style="color: #000000;"><span style="color: #000000;">k; } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(temp2<temp*<span style="color: #000000;"><span style="color: #000000;">c[i]) {s</span></span>=i,l=x,temp2=temp*<span style="color: #000000;"><span style="color: #000000;">c[i]; } } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(s==-<span style="color: #800080;"><span style="color: #800080;">1</span></span>)<span style="color: #0000ff;"><span style="color: #0000ff;"></span> break</span><span style="color: #000000;"><span style="color: #000000;">; Pivot (l,s); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(i=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; i<=n;i++<span style="color: #000000;"><span style="color: #000000;">) { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(j=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; J<=m;j++)<span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(b[j]==i)<span style="color: #0000ff;"><span style="color: #0000ff;"></span> break</span><span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(j<=m) ans[i]=<span style="color: #000000;"><span style="color: #000000;">b[j]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span>ans[i]=<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">; }}</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">main () {</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> while</span>(SCANF (<span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #800000;"><span style="color: #800000;">%d%d</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>, &n,&m)!=-<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">) { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">i,j; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(i=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; I<=n;i++) scanf (<span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #800000;"><span style="color: #800000;">%LF</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,&<span style="color: #000000;"><span style="color: #000000;">c[i]); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(i=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; i<=m;i++<span style="color: #000000;"><span style="color: #000000;">) { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(j=<span style="color: #800080;"><span style="color: #800080;">1</span></span>; J<=n;j++) scanf (<span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #800000;"><span style="color: #800000;">%LF</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,&<span style="color: #000000;"><span style="color: #000000;">a[i][j]); scanf (</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #800000;"><span style="color: #800000;">%LF</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,&<span style="color: #000000;"><span style="color: #000000;">b[i]); } init (); Simplex (); printf (</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #800000;"><span style="color: #800000;">Nasa can spend%.0lf taka.\n</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>, Ceil (v*<span style="color: #000000;"><span style="color: #000000;">m)); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span> <span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">;}</span></span></pre><p><p></p></p><p><p>UVA 10498 Happiness (linear Programming)</p></p></span>