zoj1731(优先队列)

原文转载至:http://blog.csdn.net/fenrir1205/article/details/8275011

#include <iostream>  
#include <cstdio>  
#include <queue>  
#include <cstring>  
using namespace std;  
  
struct Schedule  
{  
    int profit;  
    int dt;  
    //先处理高利润的  
    bool operator<(const Schedule &rhs)const {  
        return profit<rhs.profit;  
  
    }  
};  
  
bool used[10001];  
priority_queue<Schedule> que;  
  
int main()  
{  
    int n;  
    while(scanf("%d",&n)!=EOF){  
        while(!que.empty())que.pop();  
        int max = 0;  
        for (int i=0;i<n;i++){  
            Schedule prod;  
            scanf("%d %d",&prod.profit,&prod.dt);  
            if (prod.dt>max) max = prod.dt;  
            que.push(prod);  
        }  
        memset(used,false,sizeof(bool)*(max+1));  
        long long sum =0;  
        int current = 0;  
        //从前面往后面去检查,对于每一个products,从其deadtime开始往前寻找没有被标记过的时间点直至时间0点或者找到没有被标记的,然后标记,并把这个profit加起来。  
        while(!que.empty()){  
            Schedule prod = que.top();  
            que.pop();  
            while(prod.dt--){  
                if (!used[prod.dt]){  
                    used[prod.dt] = true;  
                    sum+=prod.profit;  
                    break;  
                }  
            }  
        }  
        printf("%d\n",sum);  
    }  
    return 0;  
}  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,565评论 25 709
  • 在此特此声明:一下所有链接均来自互联网,在此记录下我的查阅学习历程,感谢各位原创作者的无私奉献 ! 技术一点一点积...
    远航的移动开发历程阅读 13,877评论 12 197
  • 感冒了,第一天嗓子发炎,第二天咳嗽,第三天流鼻涕,打喷嚏。 生病的原因,说话多,喝水少,上火。 症状:昏昏噩噩几天...
    殷浩洋阅读 1,930评论 0 0
  • 2017年...... 当我写2016的年终个人总结的时候,我发现自己的生活上并没有什么可以写的东西...因...
    我喜欢这丫头阅读 4,042评论 0 0
  • 时间过得好快,21天呆萌写作营马上结束了,这三周是我过得最充实的三周,冥冥中有什么改变已悄然发生,预见到将对我今后...
    林林LinLin阅读 1,313评论 0 0