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

CF976E Well played!

时间:2018-05-19 18:39:55      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:实现   while   选择   get   log   cto   最优   code   title   

思路:

参考了http://codeforces.com/blog/entry/59195

可以证明在最优解中所有的第一种操作都是施加同一个物种上的。那么首先按照hp - dmg对所有物种降序排序,贪心选择前b个进行第二种(赋值)操作。然后枚举所有物种,选择一个进行第一种操作,在所有情况中取最大值。

在选择一个物种进行第一种操作的时候,不要按照(hp << a) - dmg贪心,反例:

3 1 2

20 10

5 1

25 25

实现:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 typedef pair<ll, ll> pll;
 5 
 6 const int MAXN = 200005;
 7 const ll INF = 0x3f3f3f3f3f3f3f3f;
 8 
 9 vector<pll> v;
10 
11 bool cmp(pll & x, pll & y)
12 {
13     return x.first - x.second > y.first - y.second;
14 }
15 
16 int main()
17 {
18     int n, a, b;
19     while (cin >> n >> a >> b)
20     {    
21         v.resize(n);
22         ll ans = 0;
23         for (int i = 0; i < n; i++) 
24         {
25             cin >> v[i].first >> v[i].second;
26             ans += v[i].second;
27         }
28         if (!b) { cout << ans << endl; continue; }
29         sort(v.begin(), v.end(), cmp);
30         int i = 0;
31         for ( ; i < v.size(); i++)
32         {
33             if (v[i].first <= v[i].second) break;
34         }
35         int pos = min(n, min(i, b));
36         ans = 0;
37         for (int i = 0; i < pos; i++) ans += v[i].first;
38         for (int i = pos; i < n; i++) ans += v[i].second;
39         ll maxn = ans;
40         for (int i = 0; i < n; i++)
41         {
42             if (i < pos)
43             {
44                 ll tmp = ans - v[i].first + (v[i].first << a);
45                 if (tmp > maxn) maxn = tmp;
46             }
47             else
48             {
49                 ll tmp = ans - v[i].second + (v[i].first << a);
50                 if (pos && pos == b) tmp += - v[pos - 1].first + v[pos - 1].second;
51                 if (tmp > maxn) maxn = tmp;
52             }
53         }
54         cout << maxn << endl;
55     }
56     return 0;
57 }

 

CF976E Well played!

标签:实现   while   选择   get   log   cto   最优   code   title   

原文地址:https://www.cnblogs.com/wangyiming/p/9060966.html

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