Pagini recente » Cod sursa (job #2536514) | Cod sursa (job #2944966) | Cod sursa (job #1302863) | Cod sursa (job #3158950) | Cod sursa (job #1907736)
#include <fstream>
#define in "rucsac.in"
#define out "rucsac.out"
#define min(a,b) (a < b ? a:b)
#define max(a,b) (a > b ? a:b)
#define SMAX 10003 * 5000
using namespace std;
ifstream fin(in);
ofstream fout(out);
int Smax = 0;
int n,Gmax,Cmax;
int G,V;
short G2[SMAX]; // G2[i] = Capacitatea minima pentru care obtinem suma i
void afisare()
{
for(int i=0; i<=Smax; ++i)
fout<<G2[i]<<" ";
fout<<"\n";
}
int main()
{
fin>>n>>Gmax;
while(n--)
{
fin>>G>>V;
for(int i=Smax; i>0; --i)
if(G2[i])
{
if(G2[i+V] == 0 && G2[i] + G <=Gmax) G2[i+V] = G2[i] + G;
else G2[i+V] = min(G2[i+V], G2[i]+G);
if(G2[i+V] >0)
{
Smax = max(Smax,i+V);
Cmax = max(Cmax,i+V);
}
}
if(G2[V] == 0) G2[V] = G;
else G2[V] = min(G2[V],G);
Smax = max(Smax,V);
Cmax = max(Cmax,V);
}
//afisare();
fout<<Cmax<<"\n";
fin.close(); fout.close();
return 0;
}