Pagini recente » Cod sursa (job #1142631) | Cod sursa (job #1324422) | Cod sursa (job #419118) | Cod sursa (job #2630361) | Cod sursa (job #3165409)
#include <iostream>
#include <fstream>
#include <climits>
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 e[10001];
int main()
{
int n,G,p,q,min1=INT_MAX;
fin>>n>>G;
for(int i=1;i<=10000;i++){
dp[i]=INT_MAX; /// dp[i]!=-1 s-a obtinut submultimea de suma a greutatilor =i , profitul este dp[i]
e[i]=0;
}
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]!=INT_MAX){ /// 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;
e[j+q]= e[j]+q;
}
}
}
}
/// determin maximul din dp
for(int i=1;i<=G;i++){
if(dp[i]<min1 && e[i]>=G){
min1=dp[i];
}
}
fout<<min1;
return 0;
}