HDU 1789 Doing Homework again 贪心

每天做一份作业,给出每份作业的deadline和分值,求在最好策略下扣的分值最少的情况。


首先根据作业的分值从大到小排序,如果分值相同,则时间小的排在前面。

之后按顺序将作业放在deadline的那一天, 比如有一份作业的期限是3天,就将他放在第三天来做,

如果第三天已经放了作业,就往前安排,如果第一第二天都满了,这份作业就只能被扣分了。

#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <stdio.h>
#include <cstring>
using namespace std;

class Homework{
public:
	int t,v;

	int operator <(const Homework &a) const
		{
			return (v>a.v||(v==a.v&&t<a.t));
		}
};
Homework work[1002];
int take[1002];
int main()
{
	int num,a;
	cin>>num;
	while(num--)
	{
		cin>>a;
		memset(take,0,sizeof(take));
		for(int i=1;i<=a;i++)
		{
			cin>>work[i].t;


		}
		for(int i=1;i<=a;i++)
		{
			cin>>work[i].v;
		}
		sort(work+1,work+a+1);
		int ans=0;
		for(int i=1;i<=a;i++)
		{
			bool ok=false;
				for(int k=work[i].t;k>=1;k--)
				{
					if(take[k]==0)
					{
						take[k]=1;
						ok=true;
						break;
					}
				}
				if(!ok) ans+=work[i].v;

		}
		cout<<ans<<endl;



	}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值