博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1028: 可乐(2018年中南大学研究生复试机试题 )
阅读量:4359 次
发布时间:2019-06-07

本文共 1938 字,大约阅读时间需要 6 分钟。

1028: 可乐

时间限制: 1 Sec  内存限制: 128 MB
提交: 307  解决: 59
[] [] [] [命题人:外部导入]

题目描述

猪年快乐!在这个快乐的日子里我们当然要去超市买可乐喝啦!
现在超市有n种可乐,第 i 种可乐的价格为C[i] ,体积为 2i-1 毫升,每种可乐都是无限供应的 ,现在你想买至少 L毫升的可乐 ,作为一个省钱小能手,聪明的你能够想到最少要花多少钱吗?

输入

输入包含多组测试用例。
每组测试用例第一行包含两个数字 n 和 L (1 ≤ n ≤ 30; 1 ≤ L ≤ 109) , n是可乐的种类数, L是我们最终要买的可乐体积。
第二行包含 n 个数字 C1,C2,...Cn n (1 ≤ ci ≤ 109) ,代表每一种可乐的价格。

输出

输出一个数字 , 购买至少L毫升的可乐需要的最少花费。

样例输入

4 1220 30 70 904 310000 1000 100 104 310 100 1000 10000

样例输出

1501030

来源/分类

 
 
1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 /*用贪心的思想做,尽量用单价最小的买,这里需要留意的地方是,有可能用单价最低 7 的买会出现这种情况,就是不能凑整,但是用单价低的多买一瓶有可能会比用单价高的 8 其他体积的凑整便宜,所以每次都需要进行比较,和多买一瓶进行比较*/ 9 10 struct cole{11 int v;12 int price;13 double per;14 }arr[35];15 16 bool cmp1(cole a, cole b) {17 return a.per < b.per;18 }19 20 int main(){21 int n;22 long long L;23 while (cin >> n >> L){24 for (int i = 0; i
> arr[i].price;26 arr[i].v = pow(2, i);27 arr[i].per = (double)arr[i].price / arr[i].v;28 }29 sort(arr, arr + n, cmp1); 30 int j = 0;31 long long sum = 0, min=0;32 while (L>0){33 int vol = arr[j].v;34 int cost = arr[j].price;35 sum = sum + (L / vol)*cost;36 if (j == 0){
//最开始的时候就用单价最低的价格买完,多买一瓶,保证买完37 min = (L / vol)*cost +cost;38 }39 if (L%vol == 0){
//恰好可以用最优的分量买完40 if (sum < min)min = sum;41 break;42 }43 if (sum + cost < min){
//进行比较44 min = sum + cost;45 }46 L = L%vol;47 j++;48 }49 cout << min << endl;50 }51 return 0;52 }

 

转载于:https://www.cnblogs.com/tangyimin/p/10567451.html

你可能感兴趣的文章
highcharts
查看>>
【学员管理系统】0x02 学生信息管理功能
查看>>
什么是Entity Framework(ORM)
查看>>
软件质量理解
查看>>
jquery 在 table 中修改某行值
查看>>
pyc文件是什么【转载】
查看>>
POM.xml 标签详解
查看>>
设计模式六大原则(2):里氏替换原则
查看>>
C++ 类的对象管理模型初讲
查看>>
Django(三) ORM 数据库操作
查看>>
【转】Android中自定义控件的步骤
查看>>
软件测试工作中的沟通问题
查看>>
format 的用法,9*9乘法表
查看>>
mysql--5
查看>>
《Docker入门实战》笔记(一)
查看>>
hdu 3635 Dragon Balls (并查集)
查看>>
文件操作
查看>>
7.java集合,泛型简单总结,IO流
查看>>
杭电2007 平方和与立方和
查看>>
JS邮箱验证-正则验证
查看>>