Codeforces 1154F (DP)
2024-08-26 21:11:03
题意:有一个人去买铲子,他需要买正好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]);
}
最新文章
- aspnet_isapi.dll设置图文介绍.net的程序实现伪静态
- java servlet+oracle 新手可看
- 5.SpringMVC静态文件的访问
- Using Apache Maven
- QML学习:Rectangle,Text,TextEdit,Flickable,Flipable元素
- easyui获取日期datebox中的值
- poj 1845 POJ 1845 Sumdiv 数学模板
- WinForm中使MessageBox实现可以自动关闭功能
- XAMPP(v1.83)中的PHP(v5.5.15)访问SQLServer2014
- ELK日志收集分析系统配置
- .md即markdown文件的基本常用编写语法
- CLR、程序集、反射和控制反转
- VirtualBox虚拟机禁止时间同步
- css.aa
- select、poll、epoll之间的区别总结[整理]【转】
- 使用UIScrollView 结合 UIImageView 实现图片循环滚动
- DACLs and ACEs
- system调用导致子进程socket句柄泄漏问题分析
- HDU1025贫富平衡
- java 编译与运行
热门文章
- psd文件导出为图片教程
- UOJ #54 时空穿梭 —— 计数+莫比乌斯反演+多项式系数
- 教你30分钟学会XAML
- 【备忘录】Golang交叉编译
- 微信卡券开发,代金券修改卡券信息返回40145错误码: invalid update! Can not both set PayCell and CenterCellInfo(include: center_title, center_sub_title, center_url). hint: [DZ9rna0637ent1]
- Mock&;Spring集成
- DS02--线性表
- Tool:Visual Studio
- Java字符代码中干掉制表符、回车符和换行符
- hadoop集群调优-hadoop settings and MapReduce