首页 > 其他 > 详细

HDU 1789 Doing Homework again【贪心】

时间:2015-02-13 10:06:50      阅读:202      评论:0      收藏:0      [点我收藏+]

题意:给出n个作业的截止时间,和该作业没有完成会被扣掉的分数。问最少会被扣掉多少分。

第一次做这一题是好久之前,当时不会(不会处理两个关键字关系@_@)---现在还是不会---看了题解---原来是这样的---

因为要使得扣的分数尽可能少,那就先把扣分多的作业做了,即按照扣分降序排序,再遍历看该份作业能不能完成,不能完成则扣去相应的分数

 

 

#include<iostream>  
#include<cstdio>  
#include<cstring>  
#include<algorithm> 
#define maxn 10005 
using namespace std;
int used[maxn];
struct node
{
	int d,p;
} a[maxn];
int cmp(node n1,node n2)
{
	return n1.p>n2.p;
}
int main()
{
	int ncase,n,i,j,ans;
	scanf("%d",&ncase);
	while(ncase--)
	{
		scanf("%d",&n);
		for(i=1;i<=n;i++) scanf("%d",&a[i].d);
		for(i=1;i<=n;i++) scanf("%d",&a[i].p);
		sort(a+1,a+1+n,cmp);
		memset(used,0,sizeof(used));
		ans=0;
		
		for(i=1;i<=n;i++)
		{
			for(j=a[i].d;j>=1;j--)
			{
				if(!used[j])
				{
					used[j]=1;
					break;
				}				
			}
			if(j==0) ans+=a[i].p;
		}
		printf("%d\n",ans);		
	}
}

  

HDU 1789 Doing Homework again【贪心】

原文:http://www.cnblogs.com/wuyuewoniu/p/4289685.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!