hdu17891 Doing Homework again 贪心
2012-07-25 01:06
323 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789
//题目的意思是安排做作业的顺序,使得被扣的分数最少 //贪心策略:先按时间顺序递增排序,若时间相同按分数递减排序。 //然后从下标为0~n-1逐个检查,若时间够的话加入优先队列, //若不够从队列中找出最小的分数与当前比较,若当前的分数高则替换。 #include<iostream> #include<cstdlib> #include<queue> using namespace std; struct Work { int time,score; }; class cmp { public: bool operator()(int x,int y) {return x>y;} }; priority_queue<int,vector<int>,cmp> Q; int cmp(const void *a,const void *b) { if((*(Work*)a).time==(*(Work*)b).time) return (*(Work*)b).score-(*(Work*)a).score; return (*(Work*)a).time-(*(Work*)b).time; } int main() { int cas; cin>>cas; while(cas--) { int n,i; cin>>n; struct Work *s=new Work ; for(i=0;i<n;i++) cin>>s[i].time; int sum=0,cnt=0; for(i=0;i<n;i++) { cin>>s[i].score; sum+=s[i].score; } qsort(s,n,sizeof(s[0]),cmp); for(i=cnt;i<n;i++) { if(cnt<s[i].time) { Q.push(s[i].score); cnt++; } else { int temp=Q.top(); if(temp<s[i].score) { Q.pop(); Q.push(s[i].score); } } } for(i=0;i<cnt;i++) sum-=Q.top(),Q.pop(); printf("%d\n",sum); } return 0; }
相关文章推荐
- hdoj 1789 Doing Homework again 【贪心】
- HDU 1789 Doing Homework again (贪心)
- hdu 1789 Doing Homework again(贪心)
- HDU 1789 Doing Homework again【贪心】
- hdu 1789 Doing Homework again 贪心
- GUETOJ - 1118 Doing Homework again(贪心)
- hdu 1789 Doing Homework again(贪心)
- HDU 1789 Doing Homework again (贪心)
- 【贪心】HDU-1789 Doing Homework again
- 贪心初步-A - Doing Homework again
- SDJZU_新生_贪心_Doing Homework again
- (hdu step 9.1.2)Doing Homework again(贪心——有n份作业,每份作业都有一定的完成时间及没有完成时需要付出的代价,求最小代价)
- HDU 1789 Doing Homework again(贪心)
- HDU 1789 Doing Homework again【贪心】
- hdu杭电1789 Doing Homework again【优先队列+贪心】
- Doing Homework again(做作业,贪心)
- hdu1789 Doing Homework again (贪心+优先队列)
- hdu 1789 Doing Homework again (贪心)
- hdu 1789 Doing Homework again 贪心
- HDOJ1789 Doing Homework again 贪心