Cod sursa(job #1010505)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 15 octombrie 2013 00:41:19
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<iostream>
#include<fstream>
#include<cstdio>
#include<iostream>
#include<fstream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<ctime>
using namespace std;

struct Interval
{
    int x,y;
};

Interval A[50005];
int n,gs,m1[10005],m2[10005];

inline bool cmp(const Interval A,const Interval B)
{
    return A.y < B.y;
}

inline void Citire()
{
    int i;
    freopen("rucsac.in","r",stdin);
    freopen("rucsac.out","w",stdout);
    scanf("%d%d",&n,&gs);
    for (i=1;i<=n;i++)
        scanf("%d%d",&A[i].x,&A[i].y);
}

inline void FormeazaMat()
{
     int i,j;
     sort ( A + 1 , A + n + 1 , cmp);
     for (j=1;j<=n;j++)
    {
        for (i=1;i<=gs;i++)
            {
                if (A[j].x<=i)
                    m2[i]=max(m1[i-A[j].x]+A[j].y,m1[i]);
                else m2[i]=m2[i-1];
            }
        for (i=0;i<=gs;i++)
            m1[i]=m2[i];

    }
}

int main()
{
    Citire();
    FormeazaMat();
    printf("%d\n",m2[gs]);
    return 0;
}