Cod sursa(job #1783473)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 19 octombrie 2016 00:36:20
Problema Energii Scor 100
Compilator cpp Status done
Runda cerculdeinfo-lectia3-programaredinamica1 Marime 1.03 kb
#include <cstdio>
#include <algorithm>
#define MAX 12000000
#define MOD 104659
#define INF 6000000005
using namespace std;
   
char f[MAX];
int pos=0,N,MIN,S[20005]={},SOL=10000005;
struct arr
{
    int val,w;
}v[1005];
void r(int &nr)
{
    nr=0;
    while(f[pos]<'0'||f[pos]>'9')
        pos++;
    while(f[pos]>='0'&&f[pos]<='9')
        nr=nr*10+f[pos++]-'0';
}
int main()
{
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    fread(f,1,MAX,stdin);
    r(N);r(MIN);
    for(int i=1;i<=20000;i++)
        S[i]=10000005;
    for(int i=1;i<=N;i++)
        r(v[i].val),r(v[i].w);
    for(int i=1;i<=N;i++)
    {
        for(int j=MIN;j>0;j--)
        {
            if(S[j]!=10000005)
                S[j+v[i].val]=min(S[j+v[i].val],S[j]+v[i].w);
        }
        S[v[i].val]=min(S[v[i].val],v[i].w);
    }
    for(int i=MIN;i<=20000;i++)
        if(S[i]<SOL)
            SOL=S[i];
    if(SOL!=10000005)
        printf("%d",SOL);
    else
        printf("-1\n");
    return 0;
}