3 3 3 3 3 10 5 1 3 1 3 1 6 2 3 7 1 4 6 4 2 4 3 3 2 1 7 6 5 4
0 3 5
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int T;
int num;
int N,S1,S2;
struct day{
int D;
int S;
int k;
};
const int cmp(const day &a,const day &b){
if(a.D==b.D) return a.S>b.S;
return a.D<b.D;
}
int main()
{
while(scanf("%d",&T)!=EOF){
while(T--){
S1=0;
int s=0,n=1;
day st[1010]={};
scanf("%d",&num);
for(int i=0;i<num;i++){
scanf("%d",&st[i].D);
}
for(int i=0;i<num;i++){
scanf("%d",&st[i].S);
S1+=st[i].S;//记录总的扣分
st[i].k=0;
}
sort(st,st+num,cmp);//按期限排序
n=st[num-1].D;
while(n>0){
int Max=-1;
for(int i=num-1;i>=0;i--){
if(st[i].k==0){
if(st[i].D>=n&&Max==-1) Max=i;
else if(st[i].D>=n&&st[i].S>st[Max].S) Max=i;
}
}
if(Max!=-1){
st[Max].k=1;s+=st[Max].S;
}
n--;
}//反向贪心,注意标记防止重复
printf("%d\n",S1-s);
}
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/jaker233333/article/details/47664627