Cod sursa(job #1807401)

Utilizator Matei_IgnutaMatei Ignuta Matei_Ignuta Data 16 noiembrie 2016 15:51:39
Problema Problema rucsacului Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>

using namespace std;
int n, g, d[5000][10000];
int w[5000], p[5000];
int max(int a, int b)
{
    if(a<=b) return b;
    return a;
}
int main()
{
    freopen("rucsac.in", "r", stdin);
    freopen("rucsac.out", "w", stdout);
    scanf("%d %d", &n, &g);
    for(int i=0;i<n;i++)
    {
        scanf("%d%d", &w[i], &p[i]);
    }
    for(int greutate=0; greutate<=g; greutate++)
        if(greutate<w[0])
            d[0][greutate]=0;
        else
            d[0][greutate]=p[0];
    for(int i=1; i<n; i++)
        for(int greutate=0; greutate<=g; greutate++)
            {
                d[i][greutate]=d[i-1][greutate];
                if(w[i]<=greutate)
                    d[i][greutate]=max(d[i-1][greutate-w[i]]+p[i],d[i-1][greutate]);
            }
    printf("%d ", d[n-1][g]);
    return 0;
}