问题 : 【贪心】赶作业
时间限制: 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 }