Cod sursa(job #1613461)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 25 februarie 2016 13:36:56
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <functional>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <bitset>
#include <stack>
#include <iomanip>
#define MOD 100003
#define NMAX 10005
#define INF 0x3f3f3f3f
#define pb push_back

using namespace std;

FILE *fin = freopen("rucsac.in", "r", stdin);
FILE *fout = freopen("rucsac.out", "w", stdout);

int dp[2][NMAX];
int g[NMAX], p[NMAX];

int main() {
    int n,i,S,j;

    scanf("%d%d", &n, &S);

    for(i=1;i<=n;++i)
        scanf("%d%d", &g[i], &p[i]);

    for(i=1;i<=n;++i) {
        for(j=0;j<=S;++j) {
            dp[i%2][j]=dp[(i+1)%2][j];

            if(g[i]<=j)
                dp[i%2][j]=max(dp[i%2][j], dp[(i+1)%2][j-g[i]]+p[i]);
        }
    }

    int res=0;
    for(i=1;i<=n;++i)
        res=max(res, dp[i%2][S]);

    cout<<res;

    return 0;
}