Codeforces 161 B. Discounts (贪心)
题目链接:http://codeforces.com/contest/161/problem/B
题意:
有n个商品和k辆购物车,给出每个商品的价钱c和类别t(1表示凳子,2表示铅笔),如果一辆购物车中有凳子,那么这辆购物车中最便宜的那个物品的价格能减少50%,问你如何放这些物品才能使总价钱最少。
思路:
简单贪心,判断凳子数量是否大于等于k行。
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 typedef pair <LL, int> P; 5 const int N = 1005; 6 LL a[N]; 7 P val[N], val2[N]; 8 LL inf = 1e9 + 7; 9 vector <int> res[N]; 10 int main() 11 { 12 int n, m; 13 scanf("%d %d", &n, &m); 14 int pos = 0, pos2 = 0, c; 15 for(int i = 1; i <= n; ++i) { 16 scanf("%lld %d", a + i, &c); 17 if(c == 2) { 18 val2[++pos2].first = a[i]; 19 val2[pos2].second = i; 20 } else { 21 val[++pos].first = a[i]; 22 val[pos].second = i; 23 } 24 } 25 sort(val + 1, val + pos + 1); 26 sort(val2 + 1, val2 + pos2 + 1); 27 double ans = 0; 28 int f = 0; 29 if(pos >= m) { 30 int i, j; 31 for(i = pos, j = m - 1; j; --i, --j) { 32 ans += val[i].first * 1.0 / 2; 33 res[++f].push_back(val[i].second); 34 } 35 ++f; 36 for(; i >= 2; --i) { 37 ans += val[i].first; 38 res[f].push_back(val[i].second); 39 } 40 for(i = pos2; i > 1; --i) { 41 ans += val2[i].first; 42 res[f].push_back(val2[i].second); 43 } 44 if((val[1].first >= val2[1].first && pos2)) { 45 ans += val[1].first; 46 ans += val2[1].first*1.0 / 2; 47 res[f].push_back(val[1].second); 48 res[f].push_back(val2[1].second); 49 } else if(pos2) { 50 ans += val2[1].first; 51 ans += val[1].first*1.0 / 2; 52 res[f].push_back(val2[1].second); 53 res[f].push_back(val[1].second); 54 } else { 55 ans += val[1].first*1.0 / 2; 56 res[f].push_back(val[1].second); 57 } 58 } else { 59 for(int i = pos; i; --i) { 60 ans += val[i].first * 1.0 / 2; 61 res[++f].push_back(val[i].second); 62 } 63 int i, j; 64 for(i = pos2, j = pos + 1; i && j <= m; --i, ++j) { 65 ans += val2[i].first; 66 res[++f].push_back(val2[i].second); 67 } 68 for(; i; --i) { 69 ans += val2[i].first; 70 res[f].push_back(val2[i].second); 71 } 72 } 73 printf("%.1f\n", ans); 74 for(int i = 1; i <= m; ++i) { 75 printf("%d ", res[i].size()); 76 for(int j = 0; j < res[i].size(); ++j) { 77 printf("%d%c", res[i][j], j == res[i].size() - 1? '\n': ' '); 78 } 79 } 80 return 0; 81 }
转载于:https://www.cnblogs.com/Recoder/p/5938140.html
Codeforces 161 B. Discounts (贪心)相关推荐
- 【Codeforces】158B-Taxi(贪心,怎么贪咧)
贪心 emmmm http://codeforces.com/contest/158/problem/B 题目大意:有四种旅客,四人一组,三人一组,两人一组,一人一组,一辆出租车最多可以 ...
- CodeForces - 1607D Blue-Red Permutation(贪心)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,每个数字有一个颜色,如果是蓝色,每次操作则可以减一:如果是红色,每次操作则可以加一. 问有限次操作后,能否将数组变为一个长度为 nnn 的 ...
- CodeForces - 1481E Sorting Books(贪心+dp)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,每次操作可以将任意一本书放到序列的末尾,问最少需要操作多少次,才能使得相同的数字挨在一起 题目分析:不难看出,对每个位置的数都操作一次,是 ...
- CodeForces 176A Trading Business 贪心
Trading Business 题目连接: http://codeforces.com/problemset/problem/176/A Description To get money for a ...
- codeforces 735C Tennis Championship(贪心+递推)
Tennis Championship 题目链接:http://codeforces.com/problemset/problem/735/C --每天在线,欢迎留言谈论. 题目大意: 给你一个 n ...
- codeforces 1203 E Boxers 贪心
https://codeforces.com/problemset/problem/1203/E 题目大意:给 n n n个数,每个数可以做两种变化:(1) + 1 +1 +1:(2) − 1 -1 ...
- Codeforces 854 C Planning 贪心 最大堆
题目链接: https://vjudge.net/problem/CodeForces-854C 题目描述: 有n架飞机,第i架飞机原本计划在第i分钟起飞,可是由于某种原因整个机场前k分钟是不能起飞的 ...
- CodeForces - 967D Resource Distribution(贪心+二分+构造)
题目链接:点击查看 题目大意:给出 n 个机器,每个机器可以处理 a[ i ] 的工作,现在有两个工作需要处理,工作量分别为 x1 和 x2,可以将一个工作分配给 k 个机器同时完成,需要满足: k ...
- CodeForces - 1323C Unusual Competitions(贪心)
题目链接:点击查看 题目大意:给出一个长度为 n 的括号序列,现在允许的操作是对于一段区间 [ l , r ] 内的括号重新排列,所需要的花费为区间长度,问如果想要使得括号序列变为正确的形式,最少花费 ...
最新文章
- python3操作MySQL:insert插入数据
- boost::multiprecision模块cpp_dec_float_100相关的测试程序
- Apache的配置详解
- 没有到主机的路由_网络基础知识:TCP协议之跟踪路由
- python if else elif_Python之 if-elif-else
- 探测能源、跨洲安全通信……你所想不到的量子技术!
- 白盒测试工具CodeTest
- VC2005 运行库解析
- VS连接SQL Server 2008,并实现登录和注册功能
- Mac: Mac 截长屏
- maven打包报错scalac error: xxxx\target\classes does not exist or is not a director
- 疫苗预约系统,疫苗接种管理系统,疫苗预约管理系统毕设作品
- 同济高等数学第三章之经典错误知识点笔记
- TCHAR char
- 一次性免费临时邮箱,专注个人隐私保护
- new操作符做了哪些事情?
- Java编程语言的8大优势
- Office2019专业版从下载到安装、使用
- Android 12.0 开机动画支持mp4格式视频播放
- 燃气 CAD 施工图入库 ArcGIS 系统求助