Cod sursa(job #1189245)

Utilizator RathebaSerbanescu Andrei Victor Ratheba Data 21 mai 2014 22:40:04
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <cstdio>
#include <algorithm>

using namespace std;
#define MAX 5005
struct rucsac
{
    int g,v;
}mat[MAX];
rucsac sol[MAX];
bool cmp(rucsac a, rucsac b)
{
    return a.v > b.v;
}
int main()
{
    freopen("rucsac.in","r",stdin);
    freopen("rucsac.out","w",stdout);
    int i,j,n,g,maxim,gmax,s,solf;
    scanf("%d%d",&n,&g);
    for(i=1; i<=n; i++)
        scanf("%d%d",&mat[i].g,&mat[i].v);
    sort(mat+1,mat+n+1,cmp);
    for(i=1; i<=n; i++)
    {
        maxim=0;
        for(j=i-1; j>=0; j--)
        {
            if(mat[i].g+sol[j].g<=g)
                s=mat[i].v+sol[j].v;
            if(maxim < s){maxim=s; gmax=sol[j].g+mat[i].g;}
        }
        sol[i].v=maxim; sol[i].g=gmax;
        //printf("%d %d\n",gmax,maxim);
    }
    solf=0;
    for(i=1; i<=n; i++)
        if(solf < sol[i].v and sol[i].g<=g)
            solf=sol[i].v;
    printf("%d",solf);
    return 0;
}