这个题是多组输入的多组输入。这个题的大意就是:总共有N科作业,每科都有一定的期限,每科都有没有完成情况下的扣分,求在相应的期限里最少的扣分。
#include <iostream>
#include <string.h>
using namespace std;
bool tt[1050];
struct node
{
int date,grade;
} dd[1050],temp;
int main()
{
int T;
while(scanf("%d",&T)!=EOF)
{
while(T--)
{
int n,i,j;
scanf("%d",&n);
memset(tt,0,sizeof(tt));
for(i=0; i<n; i++)
scanf("%d",&dd[i].date);
for(i=0; i<n; i++)
scanf("%d",&dd[i].grade);
for(i=0; i<n-1; i++) //按扣分的多少排序,扣分最多的在最前边,扣分相同的情况下,期限最短的在前边
for(j=0; j<n-1-i; j++)
{
if(dd[j].grade<dd[j+1].grade)
{
temp=dd[j];
dd[j]=dd[j+1];
dd[j+1]=temp;
}
else if(dd[j].grade==dd[j+1].grade)
{
if(dd[j].date>dd[j+1].date)
{
temp=dd[j];
dd[j]=dd[j+1];
dd[j+1]=temp;
}
}
}
int sum=0;
for(i=0; i<n; i++) //这几句你按实际操作手写走一遍就明白什么意思了,我说也说不明白
{
int flag=0;
for(j=dd[i].date;j>0; j--)
{
if(tt[j]==0)
{
tt[j]=1;
flag=1;
break;
}
}
if(!flag)
sum+=dd[i].grade;
}
printf("%d\n",sum);
}
}
return 0;
}