Pagini recente » Cod sursa (job #2337310) | Cod sursa (job #1467620) | Cod sursa (job #2354062) | Cod sursa (job #174312) | Cod sursa (job #3164235)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
int dp[10001];
int main()
{
int n,G,p,q,max1=-2;
fin>>G>>n;
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]<p+dp[j]){ /// 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<=n;i++){
if(dp[i]>max1){
max1=dp[i];
}
}
fout<<max1;
return 0;
}