Cod sursa(job #137665)

Utilizator tudalexTudorica Constantin Alexandru tudalex Data 17 februarie 2008 12:53:47
Problema Stalpi Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasa a 10-a Marime 1.16 kb
#include <stdio.h>
#include <set>
#include <algorithm>
using namespace std;
set <int > o;
set <int >::iterator it;
const int n_max = 100001;
int x[n_max],
	c[n_max],
	s[n_max],
	d[n_max],
	din[n_max],
	ind[n_max];
int i, n, j, Min, t;
inline int MIN(int x, int y)
{
	if ( x < y)
		return x;
	else
		return y;
}

bool cmpf(const int a, const int b)
{
	return (x[a]< x[b]);
}
int main()
{
	freopen("stalpi.in","r",stdin);
	freopen("stalpi.out","w",stdout);
	scanf("%d", &n);
	for (i = 1; i <= n; ++ i)
	{
		scanf(" %d %d %d %d ", &x[i], &c[i], &s[i], &d[i]);
//		o.insert(x[i]);
		ind[i] = i;
	}
	sort(ind + 1, ind + n + 1, cmpf);
	din[ind[1]] = c[ind[1]];
	for (i = 2; i <= n; ++ i)
	{
		t = 0;
		Min = 1<<30;
		for (j = 1; j <= n; ++ j)
			if (x[ind[i]]-s[ind[i]]>x[ind[j]])
				t = x[ind[j]];

		
		for (j = 1; j <= i; ++ j)
		{
			
			if (t <=x[ind[j]]+d[ind[j]])
			{
				Min = MIN(din[ind[j]], Min);
			}
		}
		din[ind[i]] = Min + c[ind[i]];
	}
	Min = 1<<30;
	for (i = 1; i <= n; ++ i)
	{
		if (x[ind[i]] + d[ind[i]] >=x[ind[n]])
		{
			Min = MIN(din[ind[i]], Min);
		}
	}
	printf("%d\n", Min +1);
	return 0;
}