Cod sursa(job #137227)

Utilizator razvi9Jurca Razvan razvi9 Data 17 februarie 2008 10:25:59
Problema Stalpi Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasa a 10-a Marime 0.91 kb
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
int n,i,j;
long long c1[100001],cost,m;
pair<pair<int,int>,pair<int,int>> a[100002];
int x(int i){return a[i].first.first;}
int c(int i){return a[i].first.second;}
int s(int i){return a[i].second.first;}
int d(int i){return a[i].second.second;}
int main()
{
	ifstream f("stalpi.in");
	ofstream g("stalpi.out");
	f>>n;
	for(i=1;i<=n;i++)
		f>>a[i].first.first>>a[i].first.second>>a[i].second.first>>a[i].second.second;
	sort(&a[1],&a[n+1]);
	memset(c1,127,sizeof(c1));
	for(i=1;x(i)<=x(1)+d(1) && i<=n;i++)
		c1[i]=c(1);
	c1[0]=0;
	for(i=2;i<=n;i++)
	{
		if(x(1)>=x(i)-s(i)) m=0,j=0;
		else{
			m=min(c1[i-1],c1[i]);
			j=i-1;
			while(j>=1 && x(j)>=x(i)-s(i)){
				if(c1[j-1]<m) m=c1[j-1];
				j--;}}
		cost=m+c(i);
		for(j=j+1;x(j)<=x(i)+d(i) && j<=n;j++)
			if(c1[j]>cost)c1[j]=cost;
	}
	g<<c1[n]<<endl;
	g.close();
}