hdu 1050 Moving Tables (Greedy)

本文通过一个具体的贪心算法问题实例,详细介绍了如何解决此类问题,并提供了代码实现。通过练习,加深了对贪心算法的理解和应用能力。

Problem - 1050

  过两天要给12的讲贪心,于是就做一下水贪心练习练习。

代码如下:

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <set>
 6 #include <vector>
 7 
 8 using namespace std;
 9 
10 typedef pair<int, int> PII;
11 typedef vector<PII> VPII;
12 
13 multiset<int> cor;
14 multiset<int>::iterator msi;
15 VPII rec;
16 VPII::iterator vi;
17 
18 int main() {
19     int n, T, l, r;
20     cin >> T;
21     while (T-- && cin >> n) {
22         cor.clear();
23         rec.clear();
24         for (int i = 0; i < n; i++) {
25             cin >> l >> r;
26             if (l > r) swap(l, r);
27             rec.push_back(PII(l + 1 >> 1, r + 1 >> 1));
28         }
29         sort(rec.begin(), rec.end());
30         vi = rec.begin();
31         cor.insert((*vi).second);
32         for (vi++ ; vi != rec.end(); vi++) {
33             msi = cor.lower_bound((*vi).first);
34             if (msi == cor.begin()) cor.insert((*vi).second);
35             else {
36                 msi--;
37                 cor.erase(msi);
38                 cor.insert((*vi).second);
39             }
40         }
41         cout << cor.size() * 10 << endl;
42     }
43     return 0;
44 }
View Code

 

——written by Lyon

 

转载于:https://www.cnblogs.com/LyonLys/p/hdu_1050_Lyon.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值