/*
HDOJ 1789
先按所扣分数的高低降序排序,分数一样的时候就按日期升序排序
然后就从头开始做:
如果它的deadline那一天没有被其他作业占用,那么就直接在那一天做就可以
否则,就向前找,找到有一天是没有被占用的,就在那一天做。
找不到的话,就只能被扣分。
*/
#include <iostream>
#include <algorithm>
using namespace std;
struct Work
{
int deadline;
int reduce;
};
bool cmp(const Work &a,const Work &b)
{
if( a.reduce != b.reduce)
return (a.reduce > b.reduce);
else
return (a.deadline < b.deadline);
}
int main()
{
int T,N,i,j,score,date;
Work w[1000];
bool flag[1000];
cin>>T;
while(T--)
{
memset(flag,0,sizeof(flag));
cin>>N;
for(i=0;i<N;i++)
cin>>w[i].deadline;
for(i=0;i<N;i++)
cin>>w[i].reduce;
sort(w,w+N,cmp);
score=0;
for(i=0;i<N;i++)
{
for(j=w[i].deadline;j>0;j--)
{
if(!flag[j])
{
flag[j]=1;
break;
}
}
if(j == 0)
score += w[i].reduce;
}
cout<<score<<endl;
}
return 0;
}
Greedy——HDOJ 1789
最新推荐文章于 2019-10-31 22:46:50 发布