hdu 3661 Assignments
题意:n个工人,规定时间t,给出n个A任务需要完成的时间,n个B任务需要完成的时间,每个人选一个A一个B,不重复,如果工作时间超过t,老板需要支付(A+B-t)的工资,问需要支付最少
思路:贪心
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 const int N=1010; 5 int a[N],b[N]; 6 int vis1[N],vis[N]; 7 8 bool cmp(int x,int y){ 9 return x>y; 10 } 11 12 int main(){ 13 int n; 14 while(~scanf("%d",&n)){ 15 memset(vis,0,sizeof(vis)); 16 memset(vis1,0,sizeof(vis1)); 17 int t; 18 scanf("%d",&t); 19 int sum=0; 20 for(int i=1;i<=n;i++){ 21 scanf("%d",&a[i]); 22 } 23 for(int i=1;i<=n;i++) scanf("%d",&b[i]); 24 sort(a+1,a+1+n); 25 sort(b+1,b+1+n,cmp); 26 for(int i=1;i<=n;i++) { 27 if(t<a[i]+b[i]) 28 sum+=(a[i]+b[i]-t); 29 } 30 cout<<sum<<endl; 31 } 32 }