Cod sursa(job #1717541)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 15 iunie 2016 00:23:09
Problema Energii Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>
#include <algorithm>
#define MAX 12000000
#define MOD 104659
#define INF 6000000005
using namespace std;
  
char f[MAX];
int pos=0,N,MIN,S[10000005]={},aux[10000005],SOL=0,MAXSUM=0,MAXL=0;
struct arr
{
	int val,w;
}v[1005];
void r(int &nr)
{
    nr=0;
    while(f[pos]<'0'||f[pos]>'9')
        pos++;
    while(f[pos]>='0'&&f[pos]<='9')
        nr=nr*10+f[pos++]-'0';
}
int main()
{
    freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
    fread(f,1,MAX,stdin);
	r(N);r(MIN);
	for(int i=1;i<=N;i++)
	{	
		r(v[i].val),r(v[i].w),MAXSUM+=v[i].val;
		if(MAXSUM-v[i].val<MIN)MAXL+=v[i].w;
	}
	if(MAXSUM<MIN)
	{
		printf("-1");
		return 0;
	}
	for(int i=1;i<=N;i++)
	{
		for(int j=v[i].w;j<=MAXL;j++)
			aux[j]=max(S[j],S[j-v[i].w]+v[i].val);
		for(int j=1;j<=MAXL;j++)
			S[j]=aux[j];
	}
	for(int i=MAXL;i>0;i--)
		if(S[i]>=MIN)
			SOL=i;
	printf("%d",SOL);
	return 0;
}