码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 4864 Task

时间:2015-07-21 10:35:59      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:贪心

题意: 每台机器有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);

    }
}

版权声明:都是兄弟,请随意转载,请注明兄弟是谁

HDU 4864 Task

标签:贪心

原文地址:http://blog.csdn.net/u013076044/article/details/46981613

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!