Cod sursa(job #2469367)

Utilizator MatteoalexandruMatteo Verzotti Matteoalexandru Data 6 octombrie 2019 20:29:06
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.58 kb
/*
                `-/oo+/-   ``
              .oyhhhhhhyo.`od
             +hhhhyyoooos. h/
            +hhyso++oosy- /s
           .yoooossyyo:``-y`
            ..----.` ``.-/+:.`
                   `````..-::/.
                  `..```.-::///`
                 `-.....--::::/:
                `.......--::////:
               `...`....---:::://:
             `......``..--:::::///:`
            `---.......--:::::////+/`
            ----------::::::/::///++:
            ----:---:::::///////////:`
            .----::::::////////////:-`
            `----::::::::::/::::::::-
             `.-----:::::::::::::::-
               ...----:::::::::/:-`
                 `.---::/+osss+:`
                   ``.:://///-.
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <cmath>
#define INF 0x3f3f3f3f
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) < (b)) ? (b) : (a))

using namespace std;

const int GMAX = 10000;
const int N = 5000;

int dp[5 + GMAX];
int p[5 + N], g[5 + N];

int main()
{
    freopen("rucsac.in","r",stdin);
    freopen("rucsac.out","w",stdout);
    int n, gt, i, j, sol = 0;
    scanf("%d%d", &n, &gt);
    for(i = 1; i <= n; i++) scanf("%d%d", &g[i], &p[i]);
    for(i = 1; i <= n; i++){
        for(j = gt - g[i] ; j >= 0; j--){
            dp[j + g[i]] = MAX(dp[j + g[i]], dp[j] + p[i]);
            sol = MAX(sol, dp[j + g[i]]);
        }
    }
    printf("%d\n", sol);
    return 0;
}