Cod sursa(job #1666169)

Utilizator radu.leonardoThe Doctor radu.leonardo Data 27 martie 2016 18:51:14
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>
using namespace std;

FILE *f=freopen("energii.in","r",stdin);
char buff[100000];
int pos;
inline void read(int &nr)
{while(buff[pos]<'0' || buff[pos]>'9') if(++pos==100000) fread(buff, 1, 100000, stdin), pos = 0;
nr = 0;
while('0' <= buff[pos] && buff[pos] <= '9')
{
nr = nr * 10 + buff[pos] - '0';
if(++pos == 100000) fread(buff, 1, 100000, stdin), pos = 0;
}
}

int n,k,a[1001],c[1001],b[10001],i,j;
int main()
{   fread(buff,1,100000,stdin);
    read(n);read(k);
    for(i=1;i<=n;i++) read(a[i]),read(c[i]);
    for(i=1;i<=k;i++) b[i]=999999;
    for(i=1;i<=n;i++)
    {
        for(j=k;j-a[i]>=0;j--)   if(b[j-a[i]]+c[i]<b[j]) b[j]=b[j-a[i]]+c[i];
        for(j=1;j<a[i];j++) if(c[i]<b[j])  b[j]=c[i];
    }
    freopen("energii.out","w",stdout);
    if(b[k]==999999) printf("-1");
    else printf("%d",b[k]);
}