[HDU 4864]Task:贪心

来源:互联网 发布:科比详细身体数据 编辑:程序博客网 时间:2024/06/11 00:57

点击这里查看原题

将所有机器和任务按x由大到小排序,若x相同则按y由大到小排序。
对每个任务,从所有时间大于等于它的机器中选择能力最小的去执行这个任务。

/*User:SmallLanguage:C++Problem No.:4864*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=1e5+5;int n,m,tot,c[105];ll ans;struct no{    int t,l;}e[M],f[M];bool cmp(no a,no b){    return a.t==b.t?a.l>b.l:a.t>b.t;}void init(){    tot=ans=0;    memset(c,0,sizeof(c));}void solve(){    init();    for(int i=1;i<=n;i++)        cin>>e[i].t>>e[i].l;    for(int i=1;i<=m;i++)        cin>>f[i].t>>f[i].l;    sort(e+1,e+n+1,cmp);    sort(f+1,f+m+1,cmp);    for(int i=1,j=1;i<=m;i++){        while(j<=n&&e[j].t>=f[i].t){            c[e[j].l]++;            j++;        }        for(int k=f[i].l;k<=100;k++){            if(c[k]){                tot++;                c[k]--;                ans+=500*f[i].t+2*f[i].l;                break;            }        }    }    cout<<tot<<' '<<ans<<endl;}int main(){    freopen("data.in","r",stdin);//    ios::sync_with_stdio(0);    while(cin>>n>>m) solve();    return 0;}
0 0
原创粉丝点击