当时wa很多次,虽然现在看起来错的很菜hhhh
#include <iostream>
#include <stdio.h>
#include <algorithm>
/*这个小破题最后还wa了一次 以后要记得把每个变量定义时就初始化,acm经常有多个test每次不初始化很易错 */
using namespace std;
typedef struct homework
{
int de;
int sc;
}hw;
int cmp(hw a,hw b)
{
if(a.sc!=b.sc)
return a.sc>b.sc;
return a.de<b.de;
}
int main()
{ int t,num;
scanf("%d",&t);
while(t--)
{ hw work[1001]={0};
int i=0;
scanf("%d",&num);
for( i=1;i<=num;i++)
scanf("%d",&work[i].de);
for( i=1;i<=num;i++)
scanf("%d",&work[i].sc);
sort(work+1,work+num+1,cmp);
int used[1001]={0};
int descore=0;
int j=0;
for(int i=1;i<=num;i++)
{
for(j=work[i].de;j>0;j--)
{
if(!used[j])
{
used[j]=1;
break;
}
}
if(j==0)
descore+=work[i].sc;
}/*从分数最大的开始安排,但不能简单的按照扣分多的排在前面,
这会可能出现的我主动放弃在小的日期能交的,而是选择把截至日期在后面的扣分多但其实可以晚点做的放到前面来做导致多扣分
所以像正解搞个天数数组就不会这样,为什么详情自己推下就懂了
*/
printf("%d\n",descore);
}
return 0;
}