标签:贪心
题意: 每台机器有x,y两种属性,有m个任务,如果机器的这两个属性大于任务,那么就是可以完成这个任务,并且每个任务每只能完成一个任务。
思路:先按照x排序,x相等,按照y排序,每一次记录下来可以完成这个任务的机器,寻找属性相差最小的那台。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define ll long long
#define N 111111
struct node{
int x,y;
ll ac;
void input(){
scanf("%d%d",&x,&y);
ac = 500*x+2*y;
}
}a[N],b[N];
bool cmp(node xx,node yy){
if(xx.x==yy.x) return xx.y>yy.y;
return xx.x>yy.x;
}
int n,m;
int vis[111];
int main(){
while(scanf("%d%d",&n,&m)==2){
for(int i=0;i<n;i++)
a[i].input();
for(int j=0;j<m;j++)
b[j].input();
sort(a,a+n,cmp);
sort(b,b+m,cmp);
ll sum = 0;
int ans =0;
memset(vis,0,sizeof(vis));
for(int i=0,j=0;i<m;i++){
while(j<n&&a[j].x>=b[i].x){
vis[a[j].y]++;
j++;
}
for(int k=b[i].y;k<=100;k++){
if(vis[k]){
vis[k]--;
ans++;
sum+=b[i].ac;
break;
}
}
}
printf("%d %I64d\n",ans,sum);
}
}
版权声明:都是兄弟,请随意转载,请注明兄弟是谁
标签:贪心
原文地址:http://blog.csdn.net/u013076044/article/details/46981613