Pagini recente » Cod sursa (job #545496) | Borderou de evaluare (job #2024411) | Cod sursa (job #264196) | Cod sursa (job #3354597) | Cod sursa (job #3354589)
#include <iostream>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int n,g;
freopen("rucsac.in","r",stdin);
freopen("rucsac.out","w",stdout);
scanf("%d %d",&n,&g);
vector<int> greutate(n+1);
vector<int> profit(n+1);
for(int i=1;i<=n;i++){
scanf("%d %d",&greutate[i],&profit[i]);
}
// vector<vector<int>> dp(n+1,vector<int>(g+1,0));
// int pmax=0;
// for(int i=1;i<=n;i++){
// for(int j=1;j<=g;j++){
// int luam=0;
// if(j-greutate[i]>=0){
// luam=dp[i-1][j-greutate[i]]+profit[i];
// }
// int nu_luam=dp[i-1][j];
// dp[i][j]=max(luam,nu_luam);
// }
// }
vector<int> dp1(g+1,0);
vector<int> dp2(g+1,0);
for(int i=1;i<=n;i++){
for(int j=1;j<=g;j++){
int luam=0;
if(j-greutate[i]>=0){
luam=dp1[j-greutate[i]]+profit[i];
}
int nu_luam=dp1[j];
dp2[j]=max(luam,nu_luam);
}
dp1=dp2;
}
int pmax=dp2[g];
printf("%d\n",pmax);
return 0;
}