Pagini recente » Borderou de evaluare (job #996819) | Cod sursa (job #1359446) | Cod sursa (job #1894597) | Cod sursa (job #2905609) | Cod sursa (job #907152)
Cod sursa(job #907152)
#include<iostream>
#include <fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream in ("rucsac.in");
ofstream out ("rucsac.out");
# define N 5001
# define M 500001
int g[N],p[N],v[M];
int n, G,minim = 9999999;
int s;
void citire()
{
in>>n>>G;
for( int i=1;i<=n;i++)
{
in>>g[i]>>p[i];
s += p[i];
}
for( int i=1;i<=s;i++)
{
v[i] = 9999999;
}
}
void proces()
{
for( int i=1;i<=n;i++)
{
for( int j = s - p[i]; j>0; j--)
{
if(v[j]!=9999999)
{
if(v[j]+p[i] < v[j+g[i]])
{
v[j+g[i]] = v[j]+p[i];
}
}
}
if(p[i]<v[g[i]])
{
v[g[i]]= p[i];
}
}
for( int i=1;i<=s;i++)
{
if(v[i]<minim && v[i] >= G)
{
minim=v[i];
}
}
out<<minim;
}
int main()
{
citire();
proces();
return 0;
}