标签:
题链:http://acm.hdu.edu.cn/showproblem.php?pid=1789
3 3 3 3 3 10 5 1 3 1 3 1 6 2 3 7 1 4 6 4 2 4 3 3 2 1 7 6 5 4
0 3 5
题意:有n个任务,第一排是任务完成的最后时刻,第二排是任务不在指定时刻完成所受到的惩罚。
做法:优先要做分高的,然后每个任务找离自己最近的时间,且没有被占据的时间点去完成这任务。如果在截止时间前已经没有空闲时间,就是不能完成了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <malloc.h>
#include <ctype.h>
#include <math.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#include <stack>
#include <queue>
#include <vector>
#include <deque>
#include <set>
#include <map>
struct work
{
int d,s;
};
work wo[1010];
int cmp(work a,work b)
{
//if(a.s!=b.s)
return a.s>b.s;
// return a.d>b.d;
}
map<int,bool>my;
int main()
{
int n;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
my.clear();
for(int i=0;i<n;i++)
scanf("%d",&wo[i].d);
for(int i=0;i<n;i++)
scanf("%d",&wo[i].s);
int ans=0;
sort(wo,wo+n,cmp);
for(int i=0;i<n;i++)
{
while(1)
{
if(my.count(wo[i].d)==0)
{
my[wo[i].d]=1;
break;
}
wo[i].d--;
if(wo[i].d==0)
{
ans+=wo[i].s;
break;
}
}
}
printf("%d\n",ans);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
hdu 1789 Doing Homework again 贪心
标签:
原文地址:http://blog.csdn.net/u013532224/article/details/46822365