ACDREAM 03D ACdream王国的花店(贪心专场)
来源:互联网 发布:mac上怎么玩英雄联盟 编辑:程序博客网 时间:2024/06/10 03:21
ACDREAM 03D ACdream王国的花店
Problem Description
ACdream王国的花店只有一家,所以大家想买花来装饰,店主为了防止有人恶意囤积鲜花来抬高物价(就是黄牛党啦~),于是就定下一个规矩:你买得越多,下一次买的单价就越贵!假设一个人已经购买了x朵鲜花,那么下一次购买第i朵鲜花的单价就是(x+1)*c[i],其中c[i]是一个店主为每一朵花的基本定价。
ACdream学校想开运动会,需要n朵鲜花来装饰,于是你和你的小伙伴总共m个人就得想办法花最少的钱去完成任务。请问机智的你最少需要花费多少钱呢?
Input
多组数据,每组数据首先是两个正整数,n(1<=n<=100),m(1<=m<=100)
然后是n个整数c[i],(1<=c[i]<=10^6)
Output
对于每组数据,输出一个整数,表示你需要花费的最少价格。
Sample Input
3 3
2 5 6
3 2
2 5 6
Sample Output
13
15
Hint
对于样例一,最优惠的方法就是3个人每人各买一朵,总花费2+5+6=13(元)
对于样例二,最优惠的方法是第一个人先购买第二朵,再购买第一朵,第二个人购买第三朵,总花费5+(1+1)*2+6=15(元)
解题思路:先每个人按从贵到便宜的顺序各买一朵,然后剩下的花价格变动,每个人再按从贵到便宜的顺序各买一朵,重复这样的操作,直到买完所有的花。
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <cstdlib>using namespace std;typedef long long ll;int f[105];int main() { int n, m; while (scanf("%d %d", &n, &m) == 2) { for (int i = 0; i < n; i++) { scanf("%d", &f[i]); } if (n <= m) { int sum = 0; for (int i = 0; i < n; i++) { sum += f[i]; } printf("%d\n", sum); continue; } sort(f, f + n); int sum = 0; int temp = 1; while (n) { for (int i = 0; i < m; i++) { if (!n) break; sum += f[--n] * temp; } temp++; } printf("%d\n", sum); } return 0;}
0 0
- ACDREAM 03D ACdream王国的花店(贪心专场)
- ACDREAM 03E ACdream王国的士兵(贪心专场)
- 1714 ACdream王国的花店
- ACDREAM 03G ACdream的高速公路(贪心专场)
- ACDREAM 03C Robbers(贪心专场)
- ACDREAM 03A 雷霆战机(贪心专场)
- ACDREAM 03B New Year Bonus Grant(贪心专场)
- Acdream的暴力专场
- 1715 ACdream王国的士兵
- ACDREAM 02D 小晴天老师系列——晴天的后花园(暴力专场)
- ACDREAM 05D 哗啦啦族的加法计算(DFS专场)
- ACdream发电站(贪心)
- ACdream 暴力专场B
- ACdream 暴力专场F
- XMUT acdream DP专场
- ACdream 1224 Robbers (贪心)
- ACdream
- Acdream
- day18/CalendarDemo2.java
- day18/CalendarDemo.java
- ch4_3_5利用radon函数和iradon函数构造一个简单图像的投影并重建图像.m
- 剑指offer 面试题17—合并两个排序的链表
- 最大堆 最小堆 poj2442 STL堆的使用
- ACDREAM 03D ACdream王国的花店(贪心专场)
- day18/DateDemo.java
- GNU-C MAX宏写法
- day18/MathDemo1.java
- first memory
- ch5_1_1 线性变换的matlab源程序:.m
- day18/MathDemo2.java
- 机器学习与数据挖掘-logistic回归及手写识别实例的实现
- JAVA学习第7天(3)I/O(一)