题目链接:

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)的更多相关文章

  1. Codeforces Round #552 (Div. 3) F. Shovels Shop(dp)

    题目链接 大意:给你n个物品和m种优惠方式,让你买k种,问最少多少钱. 思路:考虑dpdpdp,dp[x]dp[x]dp[x]表示买xxx种物品的最少花费,然后遍历mmm种优惠方式就行转移就好了. # ...

  2. Codeforces Gym101341K:Competitions(DP)

    http://codeforces.com/gym/101341/problem/K 题意:给出n个区间,每个区间有一个l, r, w,代表区间左端点右端点和区间的权值,现在可以选取一些区间,要求选择 ...

  3. Codeforces 1154F - Shovels Shop - [DP]

    题目链接:https://codeforces.com/contest/1154/problem/F 题解: 首先,可以确定的是: 1.$(x,y)$ 里 $x>k$ 的都不可能用: 2.肯定买 ...

  4. codeforces 711C Coloring Trees(DP)

    题目链接:http://codeforces.com/problemset/problem/711/C O(n^4)的复杂度,以为会超时的 思路:dp[i][j][k]表示第i棵数用颜色k涂完后bea ...

  5. Codeforces 1154F Shovels Shop

    题目链接:http://codeforces.com/problemset/problem/1154/F 题目大意: 商店有n把铲子,欲购k把,现有m种优惠,每种优惠可使用多次,每种优惠(x, y)表 ...

  6. Codeforces 1051 D.Bicolorings(DP)

    Codeforces 1051 D.Bicolorings 题意:一个2×n的方格纸,用黑白给格子涂色,要求分出k个连通块,求方案数. 思路:用0,1表示黑白,则第i列可以涂00,01,10,11,( ...

  7. Codeforces 1207C Gas Pipeline (dp)

    题目链接:http://codeforces.com/problemset/problem/1207/C 题目大意是给一条道路修管道,相隔一个单位的管道有两个柱子支撑,管道柱子高度可以是1可以是2,道 ...

  8. Codeforces 704C - Black Widow(dp)

    Codeforces 题目传送门 & 洛谷题目传送门 u1s1 感觉这种题被评到 *2900 是因为细节太繁琐了,而不是题目本身的难度,所以我切掉这种题根本不能说明什么-- 首先题目中有一个非 ...

  9. Codeforces 682B New Skateboard(DP)

    题目大概说给一个数字组成的字符串问有几个子串其代表的数字(可以有前导0)能被4整除. dp[i][m]表示字符串0...i中mod 4为m的后缀的个数 通过在i-1添加str[i]字符转移,或者以st ...

随机推荐

  1. js 一些工具函数

    1.js金钱转换类 这是一个远古时期的函数,拿来分享一下,它将输入的数字保留2位小数并补0 function formatAsMoney(mnt) { mnt -= 0; mnt = (Math.ro ...

  2. 数据库连接(1)-从JDBC到MyBatis

    摘要 因为有持久层框架,和Spring的存在,越来越多的人对数据库连接这块不甚了解,只知使用方便,不知其原理.所以写一个数据库连接的系列文章,总结下本人在数据库连接方面遇到的问题,和对数据库连接的理解 ...

  3. 卷积神经网络(Convolutional Neural Network,CNN)

    全连接神经网络(Fully connected neural network)处理图像最大的问题在于全连接层的参数太多.参数增多除了导致计算速度减慢,还很容易导致过拟合问题.所以需要一个更合理的神经网 ...

  4. 虎牙直播张波:掘金Nginx日志

    大家好!我是来自虎牙直播技术保障部的张波.今天主要会从数据挖掘层面跟大家探讨一下 Nginx 的价值.OpenResty 在虎牙的应用场景主要 WAF 和流控等方面,我今天主要分享的是“ Nginx ...

  5. 多机同步管理hexo博客

    转载自:https://www.zhihu.com/question/21193762/answer/79109280 一.关于搭建的流程 创建仓库,<your github username& ...

  6. SQL之case when then用法(用于分类统计)

    case具有两种格式.简单case函数和case搜索函数. --简单case函数 case sex when '1' then '男' when '2' then '女’ else '其他' end ...

  7. SVN安装和使用(简单版)

    为什么使用SVN? 通常软件的开发需要团队协作开发,每个人负责一个方面,都做完后需要把每个人的代码整合在一起,而每个人的代码方面不同或版本不同就会拖延开发进度对开发项目造成麻烦,如果一个人需要另一个人 ...

  8. Windows 10 安装ElasticSearch(2)- MSI安装ElasticSearch和安装Kibana

    翻阅上篇文章:Windows 10 安装 ElasticSearch 上次写的是下载Zip包安装的,在下载页面 发现有 MSI (BETA) 的下载可选项.了解之后发现MSI安装也值得尝试. MSI安 ...

  9. sql字符串分割扩展方法

    可编程性—表值函数 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[Split] ( @RowData ...

  10. Windows Tomcat 日志输出到 catlina.out 按日期输出,自启动

    配置tomcat和jdk环境变量 CATALINA_BASE D:\ApacheSoftwareFoundation\Tomcat8.5 CATALINA_HOME D:\ApacheSoftware ...