Cod sursa(job #237601)

Utilizator jupanubv92Popescu Marius jupanubv92 Data 30 decembrie 2008 10:40:44
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
#include <bitset>
#define MX 17000
#define inf 2000000000
using namespace std;
int sum[MX+1];
int n,S;
bitset <MX> Nr;
int minm=inf;
struct {
    int x;
    int y;
}a[MX];

void citire()
{
    scanf("%d %d",&n,&S);
    for(int i=1;i<=n;i++)
      scanf("%d %d",&a[i].x,&a[i].y);
}

int minn(int a,int b)
{
  if(a<b) return a;
   else return b;
}
void solve()
{     for(int j=0;j<=MX;j++)
         sum[j]=inf;
      Nr[0]=1;
      sum[0]=0;
      for (int i=1;i<=n;i++)
         for (int j=S;j>=0;j--)
               if (Nr[j]==1)
                {
                     sum[j+a[i].x]=minn(sum[j+a[i].x],sum[j]+a[i].y);
                     Nr[j+a[i].x]=1;
                     if (j+a[i].x>=S)
                          minm=minn(minm,sum[j+a[i].x]);
                }
      if (minm==inf)
          printf("-1\n");
      else
           printf("%d\n",minm);
}

int main()
{
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    citire();
    solve();
    return 0;
}