题目大意:有一些牛,他们的牛舍需要被打扫。有N(N <= 10000)头牛愿意打扫,从时间S到时间T,需要花费一些金钱。问若要每时每刻都有牛在打扫,至少需要花多少钱。
思路:1w的数据量不算很大,再加上时限5s,就n^2动归来做。
将牛按时间段的开始排序。
设f[i]为若取第i头牛打扫,到这头牛结束的时间最小花费是多少。
则 f[i] = min(f[i],f[j] + cost[i]) (f[i].st <= f[j].ed + 1)
最后是初值和答案的问题。由于题目中说每时每刻都有牛在打扫,所以f的初值为极大值,在要求开始之前就开始了的牛的初值是这个牛的花费。
动归时更新答案,若要求结束的时候这头牛还在工作,那么就用这头牛更新答案。最后输出答案。
CODE:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAX 10010
#define INF 0x3f3f3f3f
using namespace std;
struct Complex{
int x,y;
int cost;
bool operator <(const Complex &a)const {
if(x != a.x)
return x < a.x;
return y < a.y;
}
void Read() {