首页 > 代码库 > hdu 4864
hdu 4864
基本思想是贪心。
对于价值c=500*xi+2*yi,yi最大影响100*2<500,所以就是求xi总和最大。可以先对机器和任务的时间从大到小排序。从最大时间的任务开始,找出满足任务时间要求的所有机器,从中找出等级最低且满足任务等级要求的机器匹配。依次对任务寻找满足要求的机器。
主要是对stl不熟悉啊,自己的想法
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 #include<cstdio> 5 #include<string> 6 #include<queue> 7 #include<cmath> 8 #include<map> 9 10 using namespace std;11 12 #define mnx 10005013 #define ll long long14 #define inf 0x3f3f3f3f15 #define lson l, m, rt << 116 #define rson m+1, r, rt << 1 | 117 18 map<int, int> p;19 map<int, int>::iterator it;20 struct s{21 int xi, yi;22 bool operator < ( const s & b ) const{23 return xi > b.xi || ( xi == b.xi && yi > b.yi);24 }25 }a[mnx], b[mnx];26 int main(){27 int n, m;28 while( scanf( "%d%d", &n, &m ) != EOF ){29 p.clear();30 for( int i = 0; i < n; i++ ){31 scanf( "%d%d", &a[i].xi, &a[i].yi );32 }33 for( int i = 0; i < m; i++ ){34 scanf( "%d%d", &b[i].xi, &b[i].yi );35 }36 sort( a, a+n );37 sort( b, b+m );38 int j = 0, ans1 = 0; ll ans2 = 0;39 for( int i = 0; i < m; i++ ){40 while( j < n && a[j].xi >= b[i].xi ){41 p[a[j].yi]++;42 j++;43 }44 it = p.lower_bound( b[i].yi );45 if( it != p.end() ){46 ans1++;47 ans2 += b[i].xi * 500 + b[i].yi * 2;48 int t = it->first;49 p[t]--;50 if( p[t] == 0 ){51 p.erase( t );52 }53 }54 }55 printf( "%d %I64d\n", ans1, ans2 );56 }57 return 0;58 }
也不是很对,没ac出来
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。