Pagini recente » Cod sursa (job #843712) | Cod sursa (job #2272655) | Cod sursa (job #1728907) | Cod sursa (job #972850) | Cod sursa (job #2356639)
#include <stdio.h>
#include <string.h>
#define dim 10000
#define wmax 5001
#define gmax 1001
#define inf 0x3f3f3f3f
using namespace std;
char buff[dim+5];
FILE *fin=fopen("energii.in","r");
FILE *fout=fopen("energii.out","w");
int poz,nr_g,w,sol[2][wmax+5];
bool k;
struct generator
{
int w,c;
}v[gmax+5];
int minv(int x, int y)
{
return x<y?x:y;
}
void read(int &a)
{
a=0;
while(buff[poz]<'0' || buff[poz]>'9')
if(++poz>dim)
fread(buff,1,dim,fin),poz=0;
while(buff[poz]>='0' && buff[poz]<='9')
{
a=a*10+(buff[poz]-'0');
if(++poz>dim)
fread(buff,1,dim,fin),poz=0;
}
}
int main()
{
read(nr_g);
read(w);
int x,y;
for(int i=1;i<=nr_g;i++)
read(v[i].w),read(v[i].c);
memset(sol,inf,sizeof(sol));
sol[0][0]=sol[1][0]=0;
for(int i=1;i<=nr_g;i++,k=!k)
for(int j=1;j<=w;j++)
{
if(v[i].w<=j)
sol[k][j]=minv(sol[!k][j],sol[!k][j-v[i].w]+v[i].c);
else
sol[k][j]=sol[!k][j];
}
sol[!k][w]==inf?fprintf(fout,"-1"):fprintf(fout,"%d",sol[!k][w]);
return 0;
}