【贪心】赶作业

问题 : 【贪心】赶作业

时间限制: 1 Sec  内存限制: 64 MB

题目描述

小墨老师总是不及时做作业,所以他总有很多的作业要做。每个老师都给了他一个完成作业的最后期限,如果他超过期限交作业,老师就会在他的期末评价中扣分。假设做每一门作业总是要一天。小墨老师希望你能够帮助他安排做作业的一个顺序,以便能够被扣掉的分数最少。

输入

输入包含了多个测试用例。输入的第一行是一个整数T,代表测试用例的个数。接下来的就是T个测试用例的输入。每个测试用例都从一个正整数N(1≤N≤1000)开始,代表了作业的数目。接下来有2行。第一行包含N个整数,分别代表各个作业提交的最后期限;第二行也有N个整数,即对应于各个作业操过时间提交的扣分。

输出

对每一个测试用例,应该在一行中输出最小的扣分数。

样例输入

2
3
3 3 3
10 5 1
3
1 3 1
6 2 3

样例输出

0
3

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 struct zuo
 8 {
 9     int s,f;
10 };
11 int cmp(zuo a,zuo b)
12 {
13     return a.f>b.f;
14 }
15 zuo a[1111];
16 int t,n,tag[1111],sum,i,j;
17 
18 int main()
19 {
20     while(cin>>t)
21 
22     {
23         while(t--)
24         {
25             memset(tag,0,sizeof(tag));
26             sum=0;
27             cin>>n;
28             for(int i=0;i<n;i++)
29                 cin>>a[i].s;
30             for(int i=0;i<n;i++)
31                 cin>>a[i].f;
32             sort(a,a+n,cmp);
33             for(i=0;i<n;i++)
34             {
35                 for(j=a[i].s;j>0;j--)
36                 {
37                     if(tag[j]==0)
38                     {
39                         tag[j]=1;
40                         break;
41                     }
42                 }
43                 if(j==0)
44                     sum+=a[i].f;
45             }
46             cout<<sum<<endl;
47         }
48     }
49     return 0;
50 }
原文地址:https://www.cnblogs.com/asuml/p/5694142.html