Cod sursa(job #679872)

Utilizator Lokycatalin petre Loky Data 13 februarie 2012 20:14:34
Problema Energii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>

using namespace std;

long int a,b,i,maxim,maxim1,x[1005],y[1005],j;
long long v[10000000],k[10000000];
bool ok;

int main()
{
    ifstream f("energii.in");
    ofstream g("energii.out");
    f>>a>>b;
    for (i=1;i<=a;i++)
       f>>x[i]>>y[i];
       v[x[1]]=y[1];
       maxim=x[1];maxim1=maxim;k[x[1]]=1;
       for (i=2;i<=a;i++) {
              if (v[x[i]]==0) v[x[i]]=y[i];
              for (j=1;j<=maxim;j++) {
                     if (v[j+x[i]]==0 &&k[j]==1) {v[j+x[i]]=y[i]+v[j];if (x[i]+j>maxim1) maxim1=x[i]+j;}
                     if (v[j+x[i]]>=y[i]+v[j] &&k[j]==1) {v[j+x[i]]=y[i]+v[j];if (j+x[i]>maxim1) maxim1=x[i]+j;}
                     }
              maxim=maxim1;
              for (j=2;j<=maxim;j++)
              if (v[j]!=0 &&k[j]==0) k[j]=1;
              if (v[x[i]]>y[i]) v[x[i]]=y[i];
       }
       if (maxim<b) g<<"-1";
       else {
              maxim1=100000;
              for (j=b;j<=maxim;j++)
                     if (v[j]<maxim1 &&v[j]!=0) maxim1=v[j];
              g<<maxim1;
       }

    f.close();
    g.close();
    return 0;
}