Cod sursa(job #713643)

Utilizator andu04Popa Andi andu04 Data 14 martie 2012 20:10:16
Problema Problema rucsacului Scor 85
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <stdio.h>
#define NMAX 5001
#define C 10001
using namespace std;

int n,c,p[NMAX],g[NMAX],cost[2][C];

void citire()
{
    freopen ("rucsac.in","r",stdin);
    scanf ("%d%d",&n,&c);
    for (int i=0;i<n;i++)
        scanf ("%d%d",&g[i],&p[i]);
}

int main()
{
    citire();
    int l=0;
    for (int j=1;j<=c;j++)
        if (g[0]==j)
            cost[0][j]=p[0];
    for (int i=1;i<n;i++)
    {
        l=1-l;
        for (int j=1;j<=c;j++)
        {
            cost[l][j]=cost[1-l][j];

            if (g[i]==j && g[i]<=c && cost[l][j]<p[i])
                cost[l][j]=p[i];

            int s=cost[1-l][j-g[i]]+p[i];
            if (g[i]<j && cost[l][j]<s)
                cost[l][j]=s;
        }
    }
    freopen ("rucsac.out","w",stdout);
    printf("%d",cost[l][c]);
    return 0;
}