Cod sursa(job #2356639)

Utilizator dacianouaPapadia Mortala dacianoua Data 26 februarie 2019 20:26:38
Problema Energii Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#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;
}