现在的位置: 首页 > 综合 > 正文

hdu 1789 Doing Homework again(贪心)

2017年11月16日 ⁄ 综合 ⁄ 共 781字 ⁄ 字号 评论关闭

      题目:fwj 牛,给我讲的,贪心过。我还以为是DP,想了很长时间啊...发火

      贪心:先按要扣的分数,从大到小排序,要扣的分数想同,按截止日期,从大到小排序;在开一个数组a[ i]代表第i 天是否被占用,如果被占用,赋值为1;然后从做导游扫描一遍,如果a[arr[i].t]==0,则进行下一轮扫描,如没有时间安排给arr[i].w,则ans+=arr[i].w...

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{
     int t,d;
}arr[1010];
int a[10000];
int cmp(node x,node y)
{
	if(x.d==y.d)
		return y.t<x.t;
	else
		return y.d<x.d;
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
    {
		int n;
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
			scanf("%d",&arr[i].t);
		for(int i=1;i<=n;i++)
			scanf("%d",&arr[i].d);
		sort(arr+1,arr+1+n,cmp);
		/*for(int i=1;i<=n;i++)
			printf("%d  %d\n",arr[i].d,arr[i].t);*/
		memset(a,0,sizeof(a));
		int ans=0;
		for(int i=1;i<=n;i++)
		{
			int flag=0;
			for(int j=arr[i].t;j>=1;j--)
			    if(a[j]==0)
				{
				    a[j]=1;
					flag=1;
					break;
				}
			if(flag==0)
			   ans+=arr[i].d;
		}
		printf("%d\n",ans);
	}
	system("pause");
	return 0;
}


抱歉!评论已关闭.