hdu 1789 Doing Homework again 贪心

原创 2015年07月09日 22:10:16

题链:http://acm.hdu.edu.cn/showproblem.php?pid=1789

Doing Homework again

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8415    Accepted Submission(s): 4954


Problem Description
Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every teacher gives him a deadline of handing in the homework. If Ignatius hands in the homework after the deadline, the teacher will reduce his score of the final test. And now we assume that doing everyone homework always takes one day. So Ignatius wants you to help him to arrange the order of doing homework to minimize the reduced score.
 

Input
The input contains several test cases. The first line of the input is a single integer T that is the number of test cases. T test cases follow.
Each test case start with a positive integer N(1<=N<=1000) which indicate the number of homework.. Then 2 lines follow. The first line contains N integers that indicate the deadlines of the subjects, and the next line contains N integers that indicate the reduced scores.
 

Output
For each test case, you should output the smallest total reduced score, one line per test case.
 

Sample Input
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
 

Sample Output
0 3 5
 

Author
lcy
 


题意:有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 Problem - 1789 Doing Homework again【贪心】

Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/...

贪心-hdu-1789-Doing Homework again

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1789 题目意思: 有n个作业,每个作业有一个截止日期,每个作业如果超过截止日期完成的时候有一个惩罚...

HDU1789_Doing Homework again_贪心、并查集优

Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth...
  • yuege38
  • yuege38
  • 2017年02月19日 17:34
  • 85

HDU1789 Doing Homework again 【贪心】

Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/...

hdu 1789 Doing Homework again 贪心算法

Doing Homework againProblem DescriptionIgnatius has just come back school from the 30th ACM/ICPC. No...

hdu 1789 Doing Homework again(简单贪心)

Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot...
  • opm777
  • opm777
  • 2014年01月23日 13:58
  • 970

[HDU1789]Doing Homework again[贪心]

题目链接:[HDU1789]Doing Homework again[贪心] 题意分析:Ignatius打比赛归来,结果老师布置了作业,每份作业都需要一天来完成,并且老师还好心地给了截至日期,要是超...

【贪心】HDU-1789 Doing Homework again

Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/...

hdu1789Doing Homework again【贪心算法】

#include #include using namespace std; //题意:有一组作业,每个作业都有自己的最后期限和分数,只要改作业在自己的最后期限之前完成都可以拿分, //每一种...

HDU1789 Doing Homework again(贪心)

题目: Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu 1789 Doing Homework again 贪心
举报原因:
原因补充:

(最多只允许输入30个字)