Cod sursa(job #2260998)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 15 octombrie 2018 20:20:20
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <iostream>
#include <fstream>
#include <map>

const int MAXN = 3e5 + 5,MAXG = 3e3 + 5;

using namespace std;

ifstream in("ruksak.in");
ofstream out("ruksak.out");

int dp[MAXG],n,max_weight,cost[MAXN],weight[MAXN],cnt;
map<int,int>mapa;

int main()
{
    in>>n>>max_weight;
    for(int i = 1; i <= n; i++){
        int a,b;
        in>>a>>b;
        mapa[a]++;
        if(mapa[a] <= max_weight / a){
            weight[++cnt] = a;
            cost[cnt] = b;
        }
    }
    n = cnt;
    for(int i = 1; i <= n; i++)
        for(int j = max_weight - weight[i]; j >= 0; j--)
            dp[j + weight[i]] = max(dp[j + weight[i]],dp[j] + cost[i]);
    out<<dp[max_weight];
    return 0;
}