Supermarket poj 1456

来源:互联网 发布:足球经理手游 知乎 编辑:程序博客网 时间:2024/05/16 13:42

按时间倒着贪心

#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <queue>#include <algorithm>#include <vector>#include <cstring>#include <stack>#include <cctype>#include <utility>   #include <map>#include <string>  #include <climits> #include <set>#include <string> #include <sstream>#include <utility>#include <ctime> using std::priority_queue;using std::vector;using std::swap;using std::stack;using std::sort;using std::max;using std::min;using std::pair;using std::map;using std::string;using std::cin;using std::cout;using std::set;using std::queue;using std::string;using std::istringstream;using std::make_pair;using std::greater;const int MAXN(10010);struct HEAP{int arr[MAXN];int size;void init(){size = 0;}void sink(int sour){int temp = arr[sour];int son = sour << 1;while(son <= size){if(son < size && arr[son+1] > arr[son])++son;if(arr[son] <= temp)break;arr[sour] = arr[son];sour = son;son <<= 1;}arr[sour] = temp;}void swim(int sour){int temp = arr[sour];int p = sour >> 1;while(p >= 1 && arr[p] < temp){arr[sour] = arr[p];sour = p;p >>= 1;}arr[sour] = temp;}void push(int value){arr[++size] = value;swim(size);}int &top(){return arr[1];}void pop(){arr[1] = arr[size--];sink(1);}bool empty(){return size == 0;}};HEAP heap;vector<int> vec[MAXN];int main(){int n, p, d;while(~scanf("%d", &n)){int md = 1;for(int i = 1; i <= n; ++i){scanf("%d%d", &p, &d);vec[d].push_back(p);if(d > md)md = d;}heap.init();int ans = 0;for(int i = md; i >= 1; --i){int ts = vec[i].size();for(int j = 0; j < ts; ++j)heap.push(vec[i][j]);if(!heap.empty()){ans += heap.top();heap.pop();}vec[i].clear();}printf("%d\n", ans);}return 0;}


原创粉丝点击