Pagini recente » Cod sursa (job #1261598) | Cod sursa (job #882132) | Cod sursa (job #2249378) | Cod sursa (job #567469) | Cod sursa (job #230115)
Cod sursa(job #230115)
#include<stdio.h>
using namespace std;
typedef int stiva[50];
struct stalp
{
int c;//cost
int x;//pozitie
int s;//stanga iluminare
int d;//dreapta iluminare
};
stiva st;int n,p;stalp v[9999];int dim;
void init(int k,stiva &st)
{
if (k==0) st[k]=0; else st[k]=st[k-1];
}
void succesor(int &as,stiva &st,int k)
{
if (st[k]<n-k+p)
{
st[k]=st[k]+1;
as=1;
}
else
{
as=0;
}
}
void valid(int &ev,stiva st,int k)
{
int i;
ev=1;
for (i=1;i<k;i++)
{
if (st[i]==st[k]) ev=0;
}
}
int solutie(int k)
{
if (k==p) return(1); else return(0);
}
int tipar(stiva st)
{
int i,viz[100],count,j;
for(i=1;i<=dim;i++)
{
viz[i]=1;
}
for(i=1;i<=p;i++)
{
viz[st[i]]=0;
cout<<st[i]<<" ";
}
cout<<endl;
count=0;
for(i=1;i<=dim;i++)
{
if (viz[i]==0)
{
for(j=1;j<=dim;j++)
{
if ((i!=j)&&(viz[j]==1))
{
if ((v[j].x-v[j].s<=v[i].x)&&(v[i].x<=v[j].x+v[j].d))
{
count++;
j=dim+1;
}
}
}
}
}
int rez=0;
if (count==p)
{
for(i=1;i<=dim;i++)
{
if (viz[i]==1) rez+=v[i].c;
}
}
return (rez);
}
int main ()
{
FILE *in,*out;
in=fopen("stalpi.in","r");
out=fopen("stalpi.out","w");
int i;
fscanf(in,"%d",&dim);
for (i=1;i<=dim;i++)
{
fscanf(in,"%d",&v[i].x);
fscanf(in,"%d",&v[i].c);
fscanf(in,"%d",&v[i].s);
fscanf(in,"%d",&v[i].d);
}
int as,ev,m,min=999;
n=dim;
for(p=1;p<n;p++)
{
int k=1;
init(k,st);
while (k>0)
{
do
{
succesor(as,st,k);
if (as) valid(ev,st,k);
}
while ((as)&&(!( as && ev)));
if (as) {
if (solutie(k)) {m=tipar(st);if ((m<min)&&(m!=0)) min=m;} else
{
k++;
init(k,st);
}
} else k--;
}
}
fprintf(out,"%d",min);
fclose(in);
fclose(out);
return 0;
}