Pagini recente » Cod sursa (job #2268293) | Cod sursa (job #1126134) | Cod sursa (job #3155915) | Cod sursa (job #1272400) | Cod sursa (job #3164902)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
int dp[10001];///retine profiturile maxime pt fiecare greutate ce poate fi obtinuta din suma greutatilor el bagate in rucsac
int main()
{
int n,G,p,q,max1=-1;
fin>>n>>G;
for(int i=1;i<=10000;i++)
dp[i]=-1; /// dp[i]!=-1 s-a obtinut submultimea de suma a greutatilor =i , profitul este dp[i]
for(int i=1;i<=n;i++){
fin>>q>>p; /// am citit un nou obiect
for(int j=G-q;j>=0;j--){
if(dp[j]!=-1){ /// s-a obtinut anterior submultimea de suma a greutatilor j, obiectul de greutate g si profit p va fi adaugat si obtinem o submultime de suma j+g si profit dp[j]+p
if(dp[j+q]<dp[j]+p){ /// profitul submiltimei de suma j+g e mai mic decat profitul dp[j]+p
dp[j+q]=dp[j]+p;
}
}
}
}
/// determin maximul din dp
for(int i=1;i<=G;i++){
if(dp[i]>max1){
max1=dp[i];
}
}
fout<<max1;
return 0;
}