hdu1789

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

典型的贪心问题,水题(又一次把1000看成了100,唉,wa一次)

#include <iostream>
#include <algorithm>
using namespace std;
struct homework
{
	int deadline;
	int score;
	int state;
};
int cmp(homework a,homework b)
{
	return a.score>b.score;
}
homework a[1005];
int visit[1005];
int main()
{
	int t,i;
	cin>>t;
	int n,d;
	int sum;
	while(t--)
	{
		int sum=0;
		cin>>n;
		for(i=0;i<n;i++)
			cin>>a[i].deadline;
		for(i=0;i<n;i++)
			cin>>a[i].score;
		for(i=0;i<n;i++)
			a[i].state=0;
		for(i=0;i<1005;i++)
			visit[i]=0;
	    sort(a,a+n,cmp);
		for(i=0;i<n;i++)
		{
			if(visit[a[i].deadline]==0) {visit[a[i].deadline]=1;a[i].state=1;}
			else  
			{
				for(d=a[i].deadline-1;d>=1;d--)
				{
				   if(visit[d]==0) {visit[d]=1;a[i].state=1;break;}////这里也可以不设置state变量,根据最后的d来判断也可以
				}
			}
			if(a[i].state==0) sum=sum+a[i].score;

		}
		cout<<sum<<endl;
	}
	return 0;
}

  

posted on 2012-05-25 16:04  矮人狙击手!  阅读(583)  评论(0编辑  收藏  举报

导航