Pagini recente » Cod sursa (job #3153684) | Cod sursa (job #152549) | Cod sursa (job #293816) | Cod sursa (job #412329) | Cod sursa (job #162363)
Cod sursa(job #162363)
#include <stdio.h>
#include <stdlib.h>
//definitii sortare
#define primul_mai_mic (-1)
#define primul_mai_mare 1
#define egale 0
//definitii dimensiuni
#define G 1001
#define W 5001
#define Infinit 10000000
struct generator
{
int c, e;
};
generator v[G];
int cost[W] = { Infinit }, g, w;
void citeste()
{
freopen("energii.in", "r", stdin);
scanf("%d%d", &g, &w);
for(int i = 1; i <= g; ++i) scanf("%d%d", &v[i].e, &v[i].c);
fclose(stdin);
}
int f_cmp(const void *pa, const void *pb)
{
generator a = (*(generator*)pa), b = (*(generator*)pb);
if(a.c < b.c) return primul_mai_mic;
if(a.c > b.c) return primul_mai_mare;
//a.c == b.c
if(a.e > b.e) return primul_mai_mic;
if(a.e < b.e) return primul_mai_mare;
return egale;
}
void init_cost()
{
for(int i = 1;i <= W; ++i) cost[i] = Infinit;
}
int main()
{
citeste();
qsort(v + 1, g, sizeof(generator), f_cmp);
init_cost();
int i, j;
for(i=1;i<=g;++i)
{
for(j=1;j<=w;++j)
{
if(v[i].e>=j)
{
if(cost[j]>v[i].c) cost[j]=v[i].c;
continue;
}
if(cost[j]>cost[j-v[i].e]+v[i].c) cost[j]=cost[j-v[i].e]+v[i].c;
}
}
freopen("energii.out","w",stdout);
if(cost[w]!=Infinit) printf("%d\n",cost[w]);
else printf("-1\n");
fclose(stdout);
return 0;
}