Pagini recente » Cod sursa (job #1838922) | Istoria paginii runda/gimnaziu_4 | Cod sursa (job #1839511) | Istoria paginii runda/gimnaziu_4 | Cod sursa (job #2391977)
#include <fstream>
#include <vector>
using namespace std;
#define k first
#define d second
ifstream cin("rucsac.in");
ofstream cout("rucsac.out");
vector < pair<int,int> > t;
vector < pair<int,int> > x;
int n,g,i,j,k,maxi,a,b,p;
int main()
{
cin>>n>>g;
t.resize(n+1);
x.resize(g+1);
for(i=1;i<=n;++i)
{
cin>>a>>b;
t[i].k=a;
t[i].d=b;
}
x[t[1].k].d=t[1].d;
x[t[1].k].k=1;
for(i=2;i<=n;++i)
{
k=t[i].k;
for(j=g;j>=1;--j)
{
if(x[j].d!=0)
{
if(x[j+k].d<x[j].d+t[i].d)
{
x[j+k].d=x[j].d+t[i].d;
x[j+k].k=i;
}
if(j==k && x[j].d<t[i].d)
{
x[j].d=t[i].d;
x[j].k=i;
}
}
else if(j==k)
{
x[j].d=t[i].d;
x[j].k=i;
}
}
}
maxi=0;
for(i=1;i<=g;++i)
if(x[i].d>maxi)
{
maxi=x[i].d;
p=i;
}
/* while(p!=t[p].k)
{
cout<<x[p].k<<" ";
p=p-t[x[p].k].k;
}
*/
cout<<maxi;
return 0;
}