Pagini recente » Cod sursa (job #1415645) | Cod sursa (job #2281870) | Cod sursa (job #1999823) | Cod sursa (job #2837667) | Cod sursa (job #404482)
Cod sursa(job #404482)
#include<stdio.h>
int g,w,p[1002],c[1002],a[5003][3];//,sum[5003][3],v[102];//v[0][..]energie,v[1][..]costul
void read()
{
FILE*f=fopen("energii.in","r");
fscanf(f,"%d%d",&g,&w);
int i;
for(i=0;i<g;++i)
{
fscanf(f,"%d%d",&p[i],&c[i]);
}
fclose(f);
}
int posibil(int j,int s)
{
int aux;
while(s)
{
aux=a[s][1];
s=a[s][2];
if(aux==j)return 0;
}
return 1;
}
int dinamic()
{
int i,j,pos=1,var,ct;
a[0][0]=0;
for(i=1;i<=w;++i)
{
a[i][0]=99999999;
for(j=0;j<g;++j)
{
var=i-p[j];
if(i-p[j]<0)var=0;
//if(!a[var][j+1]&&c[j]+a[var][0]<a[i][0])
if(posibil(j,var)&&c[j]+a[var][0]<a[i][0])
{
a[i][0]=c[j]+a[var][0];pos=j;ct=var;//v[i]=a[i][0];//j+1!!!!
}
}
//a[i][pos]=1;
//sum[i][0]=pos;
//if(ct>0)copy(ct,i);
a[i][1]=pos;a[i][2]=ct;
}
if(a[w][0]==99999999)return -1;
return a[w][0];
}
int main()
{
read();
FILE*g=fopen("energii.out","w");
fprintf(g,"%d\n",dinamic());
fclose(g);
return 0;
}