Cod sursa(job #1429245)

Utilizator patrickdanDan patrick patrickdan Data 5 mai 2015 22:38:05
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
using namespace std;
int c[1006];
int d[1006];
int a[15000000];
int main()
{
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    int g,w,i,dre,i2,minim;
    scanf("%d%d",&g,&w);
    minim=2000000000;
    for(i=1;i<=20000000;i++)
      a[i]=-2;
    for(i=1;i<=g;i++)
      scanf("%d%d",&c[i],&d[i]);
    dre=0;
    for(i=1;i<=g;i++)
    {
      for(i2=dre;i2>-1;i2--)
      {
        if(a[i2]!=-2)
        {
          if(i2+c[i]>=w)
          {
            if(a[i2]+d[i]<minim)
              {
                minim=a[i2]+d[i];
                a[i2+c[i]]=a[i2]+d[i];
              }
          }
          else
          {
            if(a[i2+c[i]]==-2)
              a[i2+c[i]]=a[i2]+d[i];
            else
            if(a[i2]+d[i]<a[i2+c[i]])
                a[i2+c[i]]=a[i2]+d[i];
          }
        }
      }
      if(dre<w)
        dre=dre+c[i];
    }
    if(minim!=2000000000)
      printf("%d",minim);
    else
      printf("-1");
    return 0;
}