链接: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;
}