Cod sursa(job #437106)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 9 aprilie 2010 12:58:01
Problema Gutui Scor 70
Compilator cpp Status done
Runda teme_upb Marime 0.93 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>

using namespace std;
	

bool comp(pair<int,int> a,pair<int,int> b)
{
	if(a.first!=b.first)
		return a.first>b.first;
	return a.second>b.second;
}


int main()
{
	int n,h,u,x,y,nr[100000],max=0,i,j,nr1[100000];
	vector< pair<int,int> >v;


	ifstream in("gutui.in");
	ofstream out("gutui.out");

	in>>n>>h>>u;
	for(i=0;i<n;i++)
	{
		in>>x>>y;
		v.push_back(make_pair(x,y));
	}
	sort(v.begin(),v.end(),comp);
	
	nr[0]=0;
	if(v[0].first<=h)
		nr[1]=v[0].second;
	else
		nr[1]=-1;


	for(i=1;i<n;i++)
	{
		for(j=1;j<=i+1;j++)
		{
			nr1[j]=-1;
			if(nr[j]>nr1[j])
				nr1[j]=nr[j];
			if((j-1)*u+v[i].first<=h && nr[j-1]!=-1 && nr[j-1]+v[i].second>nr1[j])
				nr1[j]=nr[j-1]+v[i].second;
		}

		for(j=1;j<=i+1;j++)
			nr[j]=nr1[j];

	}

	for(i=0;i<=n;i++)
		if(nr[i]>max)
			max=nr[i];
	out<<max<<endl;
	return 0;

}