题意:有一个人去买铲子,他需要买正好k把。每把铲子有个标价,并且每把铲子最多只能被买一次。有m种优惠方案,每个优惠方案xi, yi是指如果这次恰好购买了xi把铲子,那么这次购买的铲子中最便宜的yi把将免费。问买k把铲子的最少花费。题目可以分多次购买铲子,只要购买的铲子总数是k把就可以。买过的铲子就不能再买了。

思路:显然,我们需要先对铲子的售价排个序,然后实际上购买的铲子就是最便宜的k把铲子,因为题目中要求购买恰好k把铲子,不能多,所以不存在去购买多余的铲子去凑优惠这种方案。那么现在的问题就变成了如何选择优惠策略,使得总花费最少。设dp[i]为购买前i把铲子的最小花费,初始值为sum[i](sum[i]是排序之后的前缀和),意思是前i个铲子什么优惠都不用。我们枚举使用什么优惠去更新dp[i], dp[i] = min(dp[i - xj] + sum[i] - sum[i - xj +yj])。因为已经对花费排好序了,所以去除最小的yj个的花费是sum[i] - sum[i - xj + yj]。答案是dp[k]。

这个题感觉很水,不知道为什么难度是2300。。。可能是题意不是很好懂把。

代码:

#include <bits/stdc++.h>
#define LL long long
#define pii pair<int, int>
using namespace std;
const int maxn = 200010;
LL a[maxn], sum[maxn], dp[maxn];
pii b[maxn];
int main() {
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
for (int i = 1; i <= n; i++) {
scanf("%lld", &a[i]);
}
for (int i = 1; i <= m; i++) {
scanf("%d%d", &b[i].first, &b[i].second);
}
sort(a + 1, a + 1 + n);
for (int i = 1; i <= n; i++)
sum[i] = sum[i - 1] + a[i];
for (int i = 1; i <= k; i++) {
dp[i] = sum[i];
for (int j = 1; j <= m; j++) {
if(i >= b[j].first) {
dp[i] = min(dp[i], dp[i - b[j].first] + sum[i] - sum[i - b[j].first + b[j].second]);
}
}
}
printf("%lld\n", dp[k]);
}

  

最新文章

  1. aspnet_isapi.dll设置图文介绍.net的程序实现伪静态
  2. java servlet+oracle 新手可看
  3. 5.SpringMVC静态文件的访问
  4. Using Apache Maven
  5. QML学习:Rectangle,Text,TextEdit,Flickable,Flipable元素
  6. easyui获取日期datebox中的值
  7. poj 1845 POJ 1845 Sumdiv 数学模板
  8. WinForm中使MessageBox实现可以自动关闭功能
  9. XAMPP(v1.83)中的PHP(v5.5.15)访问SQLServer2014
  10. ELK日志收集分析系统配置
  11. .md即markdown文件的基本常用编写语法
  12. CLR、程序集、反射和控制反转
  13. VirtualBox虚拟机禁止时间同步
  14. css.aa
  15. select、poll、epoll之间的区别总结[整理]【转】
  16. 使用UIScrollView 结合 UIImageView 实现图片循环滚动
  17. DACLs and ACEs
  18. system调用导致子进程socket句柄泄漏问题分析
  19. HDU1025贫富平衡
  20. java 编译与运行

热门文章

  1. psd文件导出为图片教程
  2. UOJ #54 时空穿梭 —— 计数+莫比乌斯反演+多项式系数
  3. 教你30分钟学会XAML
  4. 【备忘录】Golang交叉编译
  5. 微信卡券开发,代金券修改卡券信息返回40145错误码: invalid update! Can not both set PayCell and CenterCellInfo(include: center_title, center_sub_title, center_url). hint: [DZ9rna0637ent1]
  6. Mock&amp;Spring集成
  7. DS02--线性表
  8. Tool:Visual Studio
  9. Java字符代码中干掉制表符、回车符和换行符
  10. hadoop集群调优-hadoop settings and MapReduce