Cod sursa(job #1690493)

Utilizator radu.millio15Radu Millio radu.millio15 Data 15 aprilie 2016 10:15:03
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <string.h>
#include <stdio.h>
using namespace std;
int d[10005], w[10005], p[10005];
int main()
{
	int n,gmax,i,j,last,pmax;
	FILE *fin, *fout;
	fin=fopen("rucsac.in", "r");
	fout=fopen("rucsac.out", "w");
    fscanf(fin, "%d%d", &n, &gmax);
    memset(d,-1,sizeof(d));
    d[0]=0;
    last=0;
    for(i=1; i<=n; i++)
		fscanf(fin, "%d%d", &w[i], &p[i]);
	for(i=1; i<=n; i++)
		for(j=last; j>=0; j--)
			if(d[j]!=-1)
				if(j+w[i]<=gmax)
					if(d[j+w[i]]<d[j]+p[i])
					{
						d[j+w[i]]=d[j]+p[i];
						if(j+w[i]>last)
							last=j+w[i];
					}
	pmax=d[gmax];
	for(i=gmax-1; i>=1; i--)
		if(d[i]>pmax)
			pmax=d[i];
	fprintf(fout, "%d", pmax);
    return 0;
}