Pagini recente » Cod sursa (job #2496346) | Cod sursa (job #2684169) | Cod sursa (job #10764) | Cod sursa (job #182350) | Cod sursa (job #951824)
Cod sursa(job #951824)
#include<fstream>
#define IN "rucsac.in"
#define OUT "rucsac.out"
#define MAX 10000
using namespace std;
void Citeste();
void Rezolva();
void Scrie();
int n, gMax;
int g[MAX], c[MAX];
int cMax[MAX+1], uz[MAX+1][MAX+1];
int main()
{
Citeste();
Rezolva();
Scrie();
return 0;
}
void Citeste()
{
ifstream in(IN);
in>>n>>gMax;
for(int i=1; i<=n; i++)
in>>g[i]>>c[i];
in.close();
}
void Rezolva()
{
int S, i, k;
for(S=1; S<=gMax; S++)
cMax[S]=-1;
for(S=1; S<=gMax; ++S)
for(i=1; i<=n; i++)
if(g[i]<=S && cMax[S-g[i]]!=-1 && !uz[S-g[i]][i])
if(cMax[S]<c[i]+cMax[S-g[i]])
{
cMax[S]=c[i]+cMax[S-g[i]];
for(k=1; k<=n; k++)
uz[S][k]=uz[S-g[i]][k];
uz[S][i]=1;
}
}
void Scrie()
{
ofstream out(OUT);
if(cMax[gMax==-1])
out<<"IMPOSIBIL";
else
{
out<<cMax[gMax]<<'\n';
/*for(int k=1; k<=n; k++)
if(uz[gMax][k])
out<<k<<' ';
out<<'\n';*/
}
out.close();
}