题目: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;
}