P2918 [USACO08NOV]买干草Buying Hay

题目描述

Farmer John is running out of supplies and needs to purchase H (1 <= H <= 50,000) pounds of hay for his cows.

He knows N (1 <= N <= 100) hay suppliers conveniently numbered 1..N. Supplier i sells packages that contain P_i (1 <= P_i <= 5,000) pounds of hay at a cost of C_i (1 <= C_i <= 5,000) dollars. Each supplier has an unlimited number of packages available, and the packages must be bought whole.

Help FJ by finding the minimum cost necessary to purchase at least H pounds of hay.

约翰的干草库存已经告罄,他打算为奶牛们采购\(H(1 \leq H \leq 50000)\)镑干草.

他知道\(N(1 \leq N\leq 100)\)个干草公司,现在用\(1\)到\(N\)给它们编号.第\(i\)公司卖的干草包重量 为\(P_i (1 \leq P_i \leq 5,000)\) 磅,需要的开销为\(C_i (1 \leq C_i \leq 5,000)\) 美元.每个干草公司的货源都十分充足, 可以卖出无限多的干草包.

帮助约翰找到最小的开销来满足需要,即采购到至少\(H\)镑干草.

输入格式

  • Line 1: Two space-separated integers: N and H

  • Lines 2..N+1: Line i+1 contains two space-separated integers: P_i and C_i

输出格式

  • Line 1: A single integer representing the minimum cost FJ needs to pay to obtain at least H pounds of hay.

输入输出样例

输入 #1

2 15

3 2

5 3

输出 #1

9

说明/提示

FJ can buy three packages from the second supplier for a total cost of 9.

【思路】

完全背包

很有意思的一道背包题目

【题目大意】

给你干草重量和花费,每种都是无限买

买不少于h 镑干草花最少的钱

【题目分析】

很显然是可以用完全背包来做的

数据范围5000*100完全没有问题

然后就可以按照完全背包的模板来跑了、

bb[i]表示i镑干草花的最少的钱

是可以由i-a[x]的情况推过来的

(a[x]表示任意一种干草)

是bb[i-a[x]]+c[x]的最小情况推过来的

然后发现只有30分

【错误原因】

至少H镑干草这一点很又迷惑性

会情不自禁忽略掉他

但其实这才是最重要的一个地方

至少H那就是可以买比H镑多的干草

但是比H镑多又有一种限制

因为一捆干草最多是5000镑

所以最多不能超过H+5000镑

为什么呢??

因为如果超出了5000镑

那一定有一捆干草是完全多余出来的

也就是可以拿掉任意一捆干草之后还是满足至少H镑干草的

因为任意一捆干草都是小于5000镑的

H加上一个大于等于5000的数之后再减去一个小于等于5000的数

还是满足至少H镑干草的

所以多出5000之后的范围那就是没有必要的了

所以跑完全背包的时候跑H+5000

然后最后答案也是H-H+5000这个范围内的最小值

【完整代码】

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int Max = 55004;
int bb[Max],p[105],c[105]; int main()
{
int n,h;
cin >> n >> h;
memset(bb,999999,sizeof(bb));
for(register int i = 1;i <= n;++ i)
cin >> p[i] >> c[i];
bb[0] = 0;
for(register int i = 1;i <= n;++ i)
for(register int j = p[i];j <= h + 5000;++ j)
bb[j] = min(bb[j],bb[j - p[i]] + c[i]);
int M = 0x7fffffff;
for(register int i = h;i <= h + 5000;++ i)
M = min(M,bb[i]);
cout << M << endl;
return 0;
}

洛谷 P2918 [USACO08NOV]买干草Buying Hay 题解的更多相关文章

  1. bzoj1618 / P2918 [USACO08NOV]买干草Buying Hay(完全背包)

    P2918 [USACO08NOV]买干草Buying Hay 显然的完全背包 设$f[i]$为买$i$磅干草的最小代价 搞搞完全背包即可 注意到最后可能买的干草超出范围,但是价格可能更低. 于是我们 ...

  2. 洛谷P2918 [USACO08NOV]买干草(一道完全背包模板题)

    题目链接 很明显的一道完全背包板子题,做法也很简单,就是要注意 这里你可以买比所需多的干草,只要达到数量就行了 状态转移方程:dp[j]=min(dp[j],dp[j-m[i]]+c[i]) 代码如下 ...

  3. P2918 [USACO08NOV]买干草Buying Hay

    链接:Miku ---------------- 这就是一个完全背包的板子题 ---------------- 我们把重量当作重量,开销当作价值,那么这个题就是个求价值最小的完全背包 然而题目上说了是 ...

  4. 洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心)

    洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/132 ...

  5. 洛谷比赛 U5442 买(最长链)

    U5442 买 题目提供者bqsgwys 标签 树形结构 树的遍历 洛谷原创 题目背景 小E是个可爱的电路编码员. 题目描述 一天小E又要准备做电路了,他准备了一个电路板,上面有很多个电路元器件要安装 ...

  6. BZOJ1229 & 洛谷2917:[USACO2008 NOV]toy 玩具 & 洛谷4480:[BJWC2018]餐巾计划问题——题解

    标题很长emmm…… [USACO2008 NOV]toy 玩具 https://www.luogu.org/problemnew/show/P2917 https://www.lydsy.com/J ...

  7. 洛谷P3387 【模板】缩点 题解

    背景 今天\(loj\)挂了,于是就有了闲情雅致来刷\(luogu\) 题面 洛谷P3387 [模板]缩点传送门 题意 给定一个\(n\)个点\(m\)条边有向图,每个点有一个权值,求一条路径,使路径 ...

  8. [NOI导刊2010提高&洛谷P1774]最接近神的人 题解(树状数组求逆序对)

    [NOI导刊2010提高&洛谷P1774]最接近神的人 Description 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某 ...

  9. [洛谷P1029]最大公约数与最小公倍数问题 题解(辗转相除法求GCD)

    [洛谷P1029]最大公约数与最小公倍数问题 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P, ...

随机推荐

  1. 表单提交学习笔记(一)—利用jquery.form提交表单(后台.net MVC)

    起因:一开始想用MVC本身的Form提交方法,但是提交完之后想进行一些提示,MVC就稍显不足了,最后用jquery插件---jquery.form.js,完美解决了问题~~ 使用方法 一.下载jque ...

  2. Python进阶(九)----json模块, pickle模块, os模块,sys模块,hashlib模块

    Python进阶----json模块, pickle模块, os模块,sys模块,hashlib模块 一丶序列化模块 什么是序列化: ​ 将一种数据结构,转换成一个特殊的序列(特殊字符串,用于网络传输 ...

  3. 你需要知道的 5 个 Linux 新手会犯的失误

    Linux 爱好者们分享了他们犯下的一些最大错误. 终身学习是明智的 —— 它可以让你的思维敏捷,让你在就业市场上更具竞争力.但是有些技能比其他技能更难学,尤其是那些小菜鸟错误,当你尝试修复它们时可能 ...

  4. Matlab建造者模式

    构建者模式又叫建造者模式(Builder),是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继 ...

  5. Springboot html vue.js 前后分离 跨域 Activiti6 工作流 集成代码生成器 shiro 权限

    官网:www.fhadmin.org 特别注意: Springboot 工作流  前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0 ...

  6. 【MFC】在CHtmlView中在同一窗口显示新打开页面

    使用MFC的单文档,用IE核心做的简单浏览器.当打开一个新的链接时,IE核心会使用IE来打开一个新窗口显示打开的新页面.为了让新页面在本程序中显示,我试了如下方法,其中的问题一并列出: 方法1.重载C ...

  7. 宝石JUELRYE单词JUELRYE珠宝

    juelrye n.珠宝 late 14c., juelrye "precious ornaments, jewel juelrye (uncountable) Adornment with ...

  8. Java利用POI实现导入导出Excel表格示例代码

    转自:https://www.jb51.net/article/95526.htm 介绍 Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组件组成,其 ...

  9. 【转】Go调度器原理浅析

    goroutine是golang的一大特色,或者可以说是最大的特色吧(据我了解),这篇文章主要翻译自Morsing的[这篇博客](http://morsmachine.dk/go-scheduler) ...

  10. Flume实战案例运维篇

    Flume实战案例运维篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Flume概述 1>.什么是Flume Flume是一个分布式.可靠.高可用的海量日志聚合系统,支 ...