Mai intai trebuie sa te autentifici.
Cod sursa(job #972424)
Utilizator | Data | 11 iulie 2013 17:39:22 | |
---|---|---|---|
Problema | Problema rucsacului | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.8 kb |
#include<fstream>
#include<iostream>
using namespace std;
int n,g,w[5010],p[5010],a[10010],b[10010];
int main()
{
ifstream in("rucsac.in");
ofstream out("rucsac.out");
in>>n>>g;
for(int i=1;i<=n;i++)
{
in>>w[i]>>p[i];
}
in.close();
/*for(int i=1;i<=n;i++)
{
for(int j=0;j<=g;j++)
{
a[i][j]=a[i-1][j];
if(j>=w[i])
{
a[i][j]=max(a[i-1][j], a[i-1][j-w[i]]+p[i]);
}
}
}*/
for(int i=1;i<=n;i++)
{
if(i%2==1)
{
for(int j=0;j<=g;j++)
{
a[j]=b[j];
if(j>=w[i])
{
a[j]=max(b[j], b[j-w[i]]+p[i]);
}
}
}
else
{
for(int j=0;j<=g;j++)
{
b[j]=a[j];
if(j>=w[i])
{
b[j]=max(a[j], a[j-w[i]]+p[i]);
}
}
}
}
if(n%2==1)
out<<a[g];
else
out<<b[g];
return 0;
}