题目链接:传送门
分析:题意大概是给定DDL,要在DDL之前尽可能的完成任务使得扣的分数最少
思路:运用贪心法思想,先按时间排序,时间短的排前面,时间相同按分数排序,分数大的在前面,最后再筛选就好了
AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
struct work{
int day;
int sco;
bool flag; //用来标记这一科做不做
}a[1005];
bool cmp(work a1,work a2){
if(a1.day!=a2.day) return a1.day<a2.day;
else return a1.sco>a2.sco;
}
int main(){
int t;
cin>>t;
while(t--){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
cin>>a[i].day;
for(int i=0;i<n;i++){
cin>>a[i].sco;
a[i].flag=true;
}
sort(a,a+n,cmp);
int sum=0,k=1;
for(int i=0;i<n;i++){
if(a[i].day>=k){
k++; continue;
}
int min=a[i].sco,p=i;
for(int j=0;j<i;j++){
if(a[j].sco<min&&a[j].flag){
min=a[j].sco;
p=j;
}
}
sum+=min;
a[p].flag=false;
}
cout<<sum<<endl;
}
}