codeforces#1154F. Shovels Shop (dp)
题目链接:
http://codeforces.com/contest/1154/problem/F
题意:
有$n$个物品,$m$条优惠
每个优惠的格式是,买$x_i$个物品,最便宜的$y_i$个物品免费
每条优惠可以无限次使用(当时以为每个优惠只能用一次)
可以买一个物品,不参与优惠
求买k个物品的最低花费
数据范围:
$1 \le n, m \le 2 \cdot 10^5, 1 \le k \le min(n, 2000)$
$1 \le a_i \le 2 \cdot 10^5$
$1 \le y_i \le x_i \le n$
分析:
太蠢了,一开始以为每条优惠只能用一次,并且以为,优惠都有一个使用次序,所以先给优惠排序,然后枚举优惠更新dp数组
原来每个优惠能用无限次,那么我们再加入一条$(1,0)$优惠,枚举购买长度,用每个优惠对它更新
虽然两种方法的状态定义得相同。。。。
ac代码:
#include<bits/stdc++.h>
#define ll long long
#define pa pair<int,int>
#define mak make_pair
using namespace std;
const int maxn=2e5+3000;
const ll INF=1e18;
int price[maxn],x[maxn],y[maxn];
ll sum[maxn],dp[2005];
int main()
{
int n,m,k;
scanf("%d %d %d",&n,&m,&k);
for(int i=1; i<=n; i++)scanf("%d",&price[i]);
sort(price+1,price+1+n);
for(int i=1;i<=k;i++)sum[i]=sum[i-1]+price[i];
for(int i=1; i<=m; i++)
scanf("%d %d",&x[i],&y[i]);
x[m+1]=1;y[m+1]=0;
for(int i=0; i<=k; i++)dp[i]=INF;
dp[0]=0;
for(int i=1;i<=k;i++)
{
for(int j=1;j<=m+1;j++)
if(i-x[j]>=0)
dp[i]=min(dp[i],dp[i-x[j]]+sum[i]-sum[i-x[j]+y[j]]);
}
printf("%lld\n",dp[k]);
return 0;
}
codeforces#1154F. Shovels Shop (dp)的更多相关文章
- Codeforces Round #552 (Div. 3) F. Shovels Shop(dp)
题目链接 大意:给你n个物品和m种优惠方式,让你买k种,问最少多少钱. 思路:考虑dpdpdp,dp[x]dp[x]dp[x]表示买xxx种物品的最少花费,然后遍历mmm种优惠方式就行转移就好了. # ...
- Codeforces Gym101341K:Competitions(DP)
http://codeforces.com/gym/101341/problem/K 题意:给出n个区间,每个区间有一个l, r, w,代表区间左端点右端点和区间的权值,现在可以选取一些区间,要求选择 ...
- Codeforces 1154F - Shovels Shop - [DP]
题目链接:https://codeforces.com/contest/1154/problem/F 题解: 首先,可以确定的是: 1.$(x,y)$ 里 $x>k$ 的都不可能用: 2.肯定买 ...
- codeforces 711C Coloring Trees(DP)
题目链接:http://codeforces.com/problemset/problem/711/C O(n^4)的复杂度,以为会超时的 思路:dp[i][j][k]表示第i棵数用颜色k涂完后bea ...
- Codeforces 1154F Shovels Shop
题目链接:http://codeforces.com/problemset/problem/1154/F 题目大意: 商店有n把铲子,欲购k把,现有m种优惠,每种优惠可使用多次,每种优惠(x, y)表 ...
- Codeforces 1051 D.Bicolorings(DP)
Codeforces 1051 D.Bicolorings 题意:一个2×n的方格纸,用黑白给格子涂色,要求分出k个连通块,求方案数. 思路:用0,1表示黑白,则第i列可以涂00,01,10,11,( ...
- Codeforces 1207C Gas Pipeline (dp)
题目链接:http://codeforces.com/problemset/problem/1207/C 题目大意是给一条道路修管道,相隔一个单位的管道有两个柱子支撑,管道柱子高度可以是1可以是2,道 ...
- Codeforces 704C - Black Widow(dp)
Codeforces 题目传送门 & 洛谷题目传送门 u1s1 感觉这种题被评到 *2900 是因为细节太繁琐了,而不是题目本身的难度,所以我切掉这种题根本不能说明什么-- 首先题目中有一个非 ...
- Codeforces 682B New Skateboard(DP)
题目大概说给一个数字组成的字符串问有几个子串其代表的数字(可以有前导0)能被4整除. dp[i][m]表示字符串0...i中mod 4为m的后缀的个数 通过在i-1添加str[i]字符转移,或者以st ...
随机推荐
- Java枚举:小小enum,优雅而干净
<Java编程思想>中有这么一句话:“有时恰恰因为它,你才能够‘优雅而干净’地解决问题”——这句话说的是谁呢?就是本篇的主角——枚举(Enum)——大家鼓掌了. 在之前很长时间一段时间里, ...
- 最简单的SpringBoot整合MyBatis教程
前面两篇文章和读者聊了Spring Boot中最简单的数据持久化方案JdbcTemplate,JdbcTemplate虽然简单,但是用的并不多,因为它没有MyBatis方便,在Spring+Sprin ...
- jdk切换小工具
今天无意之中看到一个小工具,就是可以自由切换jdk版本!以前每次切换jdk还要去找环境变量找半天,emmm.... 现在我们只需要双击一个xxx.bat的一个批处理文件,就可以自由切换jdk版本,很方 ...
- Angular开发技巧
由于之前有幸去参加了ngChina2018开发者大会,听了will保哥分享了Angular开发技巧,自己接触Angular也有差不多快一年的时间了,所以打算对Angular开发中的一些技巧做一个整理 ...
- vue.js移动端配置flexible.js
前言 最近在用vue做移动端项目,网上找了一些移动端适配的方案,个人觉得手淘团队flexible.js还是比较容易上手,在这里做下总结. 主体 flexible.js适配方案采用rem布局,根据屏幕分 ...
- 解决WebMagic抓HTTPS时出现SSLException
访问我的博客 前言 在今年二月份在项目中引入了 WebMagic 技术,用来抓取合作方的书籍,详见之前文章:WebMagic之爬虫监控,这两天新接入了一个合作商,对方接口采取的是 HTTPS 协议,而 ...
- C#语法——元组类型
元组Tuple 我们现在使用的C#语法已经可以满足日常的开发需求,但C#语法还在进行版本的更新,在创造更多更优秀的语义来让我们使用.这里介绍一下C#5.0里的提供的语法——元组. 在C#中定义T ...
- 《C#并发编程经典实例》学习笔记—2.5 等待任意一个任务完成 Task.WhenAny
问题 执行若干个任务,只需要对其中任意一个的完成进行响应.这主要用于:对一个操作进行多种独立的尝试,只要一个尝试完成,任务就算完成.例如,同时向多个 Web 服务询问股票价格,但是只关心第一个响应的. ...
- 类和对象,以及 LeetCode 每日一题
所有类都是引用类型. 1 定义类 类是某一批对象的抽象. 1.1 定义类的语法: [修饰符] class 类名{ 零到多个构造器定义 零到多个成员变量 零到多个方法 } 对于一个类定义而言,可以包含三 ...
- 【English】十、"谓语的地方"看到有两个动词:I go say hello.、非谓语形式
一.I go say hello. 这是一种偏口语的说法.一个句子中不能同时有两个谓语. 标准的用法有: I go and say hello. and 连接这两个动词,表示并列等关系.go and ...