题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=1789
也是一道简单的贪心,用到了结构体排序而已.
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int t,n,ans;
int v[1111];
struct xx
{
int ff;
int tt;
}a[1111];
int cmp(struct xx x,struct xx y)
{
if(x.ff!=y.ff)
return x.ff>y.ff;//扣分越多的科目越放前
return x.tt<y.tt;//扣分相等时间越长的越后
}
int main (){
while(cin>>t)
{
while(t--){
memset(v,0,sizeof(v));
int i;
ans=0;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i].tt;
for(i=0;i<n;i++)
cin>>a[i].ff;
sort(a,a+n,cmp);
for(i=0;i<n;i++)
{
int j=a[i].tt;
for(;j>0;j--)
if(!v[j]){
v[j]=1;
break;
}
if(j==0)
ans+=a[i].ff;
}
cout<<ans<<endl;
}
}
return 0;
}