[Usaco2008 Nov]Buying Hay 购买干草
题目描述
约翰的干草库存已经告罄,他打算为奶牛们采购H(1≤H≤50000)磅干草,他知道N(1≤N≤100)个干草公司,现在用1到N给它们编号。第i个公司卖的干草包重量为Pi(1≤Pi≤5000)磅,需要的开销为Ci(l≤Ci≤5000)美元.每个干草公司的货源都十分充足,可以卖出无限多的干草包.帮助约翰找到最小的开销来满足需要,即采购到至少H磅干草.
输入格式
第1行输入N和H,之后N行每行输入一个Pi和Ci.
输出格式
最小的开销.
与普通的完全背包不同的是,这题装的干草可以超过所需的重量。这里介绍两种常见的做法。
1.把背包总体积往上扩一段,也就是把背包容量扩大。设此时的容量为m'。然后做完全背包即可。最后枚举m~m'的每一位,取最小代价。由于题中的Pi≤5000,所以让m'等于m+5000即可。
2.刷表法。设当前已经买了j磅的干草,已经买了i-1种干草,每种干草的重量为ci、价格为vi。那么:
\]
如果j+c[i]>m,那么直接计算到dp[m]的头上即可。所以把算式微调一下,改为:
\]
第一种的时间复杂度为O(N(M+Max{ci}));第二种为O(NM)。实际上跑得差不多快。
第二种的代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#define maxn 101
#define maxm 50001
using namespace std;
int dp[maxm],c[maxn],v[maxn];
int n,m;
inline int read(){
register int x(0),f(1); register char c(getchar());
while(c<'0'||'9'<c){ if(c=='-') f=-1; c=getchar(); }
while('0'<=c&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int main(){
n=read(),m=read();
for(register int i=1;i<=n;i++) c[i]=read(),v[i]=read();
memset(dp,0x3f,sizeof dp);
dp[0]=0;
for(register int i=1;i<=n;i++){
for(register int j=0;j<=m;j++){
dp[min(j+c[i],m)]=min(dp[min(j+c[i],m)],dp[j]+v[i]);
}
}
printf("%d\n",dp[m]);
return 0;
}
[Usaco2008 Nov]Buying Hay 购买干草的更多相关文章
- [BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草
[BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草 试题描述 约翰的干草库存已经告罄,他打算为奶牛们采购H(1≤H≤50000)磅干草. 他知道N(1≤N≤100)个干草 ...
- BZOJ 1618: [Usaco2008 Nov]Buying Hay 购买干草( dp )
无限背包dp.. 因为题目中说至少到 H 磅 , 我就直接把 H * 2 了.. ----------------------------------------------------------- ...
- BZOJ 1618: [Usaco2008 Nov]Buying Hay 购买干草
题目 1618: [Usaco2008 Nov]Buying Hay 购买干草 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 679 Solved: ...
- [Usaco2008 Nov]Buying Hay 购买干草[背包]
Description 约翰的干草库存已经告罄,他打算为奶牛们采购日(1≤日≤50000)磅干草. 他知道N(1≤N≤100)个干草公司,现在用1到N给它们编号.第i个公司卖的干草包重 ...
- 【BZOJ】1618: [Usaco2008 Nov]Buying Hay 购买干草(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1618 裸的01背包,注意背包的容量不是v即可. #include <cstdio> #i ...
- bzoj 1618: [Usaco2008 Nov]Buying Hay 购买干草【背包】
好像是完全背包吧分不清了-- 好像是把数组二维压一维的时候,01背包倒序,完全背包正序 ```cpp include include using namespace std; const int N= ...
- BZOJ2059: [Usaco2010 Nov]Buying Feed 购买饲料
数轴上n<=500个站可以买东西,每个站位置Xi,库存Fi,价格Ci,运东西价格是当前运载重量的平方乘距离,求买K<=10000个东西到达点E的最小代价. f[i,j]--到第i站不买第i ...
- BZOJ_1618_ [Usaco2008_Nov]_Buying_Hay_购买干草(动态规划,完全背包)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1618 有n种物品,每种物品有价值和重量,可以无限拿.现在要满足价值之和大于等于h,问最小重量. ...
- BZOJ1606: [Usaco2008 Dec]Hay For Sale 购买干草
1606: [Usaco2008 Dec]Hay For Sale 购买干草 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 612 Solved: 46 ...
随机推荐
- 2020-2021-1 20209307《Linux内核原理与分析》第四周作业
一.Linux内核源代码简介 1.计算机三大法宝 存储程序计算机 函数调用堆栈 中断机制 2.操作系统两把宝剑 中断上下文的切换 进程上下文的切换 3.函数目录 Linux-3.18.6/arch/x ...
- layui的基本使用
打开官网https://www.layui.com/下载这个框架 官网首页 下载到 layui 的最新版,它经过了自动化构建,更适合用于生产环境.目录结构如下 ├─css //css目录 │ │─mo ...
- SpringBoot从入门到精通教程(六)
之前学了,这么多东西 thyemeaf .MyBatis 还有 配置文件等等,今天我们就来做一个小案例 CRUD,程序员的必备 项目结构 pom.xml <!-- mybatis 相关依赖 -- ...
- openstack高可用集群19-linuxbridge结合vxlan
生产环境,假设我们的openstack是公有云,我们一般的linuxbridge结合vlan的模式相对于大量的用户来说是vlan是不够用的,于是我们引进vxlan技术解决云主机内网网络通讯的问题. 我 ...
- Python:大神用的贼溜的实用技巧分享
整理字符串输入 整理用户输入的问题在编程过程中极为常见.通常情况下,将字符转换为小写或大写就够了,有时你可以使用正则表达式模块「Regex」完成这项工作.但是如果问题很复杂,可能有更好的方法来解决: ...
- 两千星 .NET5 框架 Furion 亮点分析(一)
让 .NET 开发更简单,更通用,更流行. Furion 介绍 Furion 是基于 .NET5 平台下打造的现代化 Web 框架.旨在 让 .NET 开发更简单,更通用,更流行.. Furion 非 ...
- FaaS,未来的后端服务开发之道
说 FaaS 先要说说 PaaS 平台即服务(Platform as a Service)是一种云计算服务,提供运算平台与解决方案堆栈即服务.在云计算的典型层级中,平台即服务层介于软件即服务与基础设施 ...
- 当Thymeleaf遇到向js中传值的操作
在使用Thymeleaf的时候.关于一些点击操作非常头疼.往往需要向JS里面传递各种东西. 然而,在用Thymeleaf的时候.js操作需要拼接语句.但是又不好拼接. 关于一些操作,一般也是在表格中. ...
- 安装交叉编译工具arm-linux-gcc-4.3.2 并且修改环境变量
安装交叉编译工具arm-linux-gcc-4.3.2 2011-07-08 00:55:28| 分类: 嵌入式|举报|字号 订阅 环境:Fedora 9STEP 1: 下载arm-linu ...
- Ubuntu和UOS+mips64l龙芯处理器安装编译Openssl
1.下载openssl开发包文件,我这里下载的是openssl-1.1.1f.tar.gz:并放在/data/home/dengchaoqun/openssl1.1.1目录下 2.终端切换到当前目录下 ...