标签:
题链: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