Orar semigroup #2

Orar semigroup #2

Test 11/25, 11/28

#include<iostream>
#include<fstream>
using namespace std;
int a[10][10],n,m,sol[10][10],ax,bx,cx,ay,by,cy,oka=1,okb=2,okc=3,nr;

void citire()
{int i,j;
ifstream f("date");
f>>n>>m;
for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
        f>>a[i][j];
f>>ax>>ay>>bx>>by>>cx>>cy;
}

void fill(int i, int j, int k)
{
    if(a[i][j]==k)
    {
    a[i][j]=-k;nr++;
    if(i==bx && j==by)
        okb=1;
    if(i==cx && j==cy)
        okc=1;
    fill(i-1,j,k);
    fill(i-1,j+1,k);
    fill(i,j+1,k);
    fill(i+1,j+1,k);
    fill(i+1,j,k);
    fill(i+1,j-1,k);
    fill(i,j-1,k);
    fill(i-1,j-1,k);
    }
}

int main()
{int nra,i,j,k,nrb,nrc,minim=INT_MAX;
citire();
k=a[ax][ay];
oka=1;
okb=2;
okc=3;
fill(ax,ay,k);
nra=nr;
nr=0;
if(oka==1 && okb==2 && okc==3)
{k=a[bx][by];
fill(bx,by,k);
nrb=nr;nr=0;
if(okc==3)
    cout<<"Obiecte diferite";
fill(cx,cy,a[cx][cy]);
nrc=nr;
if(nra<=nrb && nra<=nrc)
    cout<<endl<<nra;
if(nrb<=nra && nrb<=nrc)
    cout<<endl<<nrb;
if(nrc<=nrb && nrc<=nra)
    cout<<endl<<nrc;
}

}
GREEDY. NETERMINATA. Se dau n numere întregi nenule B={b1, b2, …, bn} si m numere întregi nenule a1, a2, …, am. (m<n). Să se determine o submulţime a mulţimii B care maximizează valoarea expresiei
E=a1*x1 + a2*x2 + … + am*xm

#include<iostream>
#include<fstream>
using namespace std;
int n,m,b[100],a[100];

void citire()
{int i;
ifstream f("date");
f>>n;
for(i=1;i<=n;i++)
    f>>b[i];
f>>m;
for(i=1;i<=m;i++)
    f>>a[i];
}

int main()
{int e=0,i,j,aneg[10],bneg[10],k=0,l=0,mm;
citire();
sort(a,m+a);
sort(b,n+b);
mm=m;
for(i=1;i<=m;i++)
    if(a[i]<0)
    {aneg[k]=a[i];k++;}
for(i=1;i<=n;i++)
    if(b[i]<0)
    {bneg[l]=b[i];l++;}
for(i=1;i<k;i++)
    for(j=i+1;j<=k;j++)
        if(abs(aneg[i])>abs(aneg[j]))
            swap(aneg[i],aneg[j]);
       
for(i=1;i<l;i++)
    for(j=i+1;j<=l;j++)
        if(abs(bneg[i])>abs(bneg[j]))
            swap(bneg[i],bneg[j]);

    while(k>0)
    {    e=e+aneg[k]*bneg[l];
        k--;
        l--;
    }
    while(mm>0)
    {
        if(a[i]>0)
            {e=e+a[mm]*b[n];
    mm--;
    n--;}
            else break;
    }

cout<<e;
}

duminică, 27 noiembrie 2011 by DlMuresan
Categories: , | Leave a comment

Leave a Reply