Pagini recente » Cod sursa (job #717104) | Cod sursa (job #1139922) | Cod sursa (job #2705881) | Cod sursa (job #2834421) | Cod sursa (job #2260998)
#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;
}