Buns(dp+多重背包)
2 seconds
256 megabytes
standard input
standard output
Lavrenty, a baker, is going to make several buns with stuffings and sell them.
Lavrenty has n grams of dough as well as m different stuffing types. The stuffing types are numerated from 1 tom. Lavrenty knows that he has ai grams left of the i-th stuffing. It takes exactly bi grams of stuffing i and cigrams of dough to cook a bun with the i-th stuffing. Such bun can be sold for di tugriks.
Also he can make buns without stuffings. Each of such buns requires c0 grams of dough and it can be sold ford0 tugriks. So Lavrenty can cook any number of buns with different stuffings or without it unless he runs out of dough and the stuffings. Lavrenty throws away all excess material left after baking.
Find the maximum number of tugriks Lavrenty can earn.
The first line contains 4 integers n, m, c0 and d0 (1 ≤ n ≤ 1000, 1 ≤ m ≤ 10, 1 ≤ c0, d0 ≤ 100). Each of the following m lines contains 4 integers. The i-th line contains numbers ai, bi, ci and di (1 ≤ ai, bi, ci, di ≤ 100).
Print the only number — the maximum number of tugriks Lavrenty can earn.
10 2 2 1 7 3 2 100 12 3 1 10
241
100 1 25 50 15 5 20 10
200
To get the maximum number of tugriks in the first sample, you need to cook 2 buns with stuffing 1, 4 buns with stuffing 2 and a bun without any stuffing.
In the second sample Lavrenty should cook 4 buns without stuffings.
思维:让你做蛋糕,有各种口味的奶油,和面,消耗一定的面一定口味的奶油可以卖d元,问最多买多少钱;因为是蛋糕肯定是整个整个的,所以要用到背包;多重背包;
dp[i][k]代表前i种蛋糕在面小于等于k的最大利润;
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
const int INF=0x3f3f3f3f;
#define SI(x) scanf("%d",&x)
#define PI(x) printf("%d",x)
#define P_ printf(" ")
#define mem(x,y) memset(x,y,sizeof(x))
struct Node{
int a,b,c,d;
};
Node dt[];
int dp[][];
int main(){
int n;
int m;
while(~scanf("%d%d%d%d",&n,&m,&dt[].c,&dt[].d)){
dt[].a=;dt[].b=;
for(int i=;i<=m;i++)scanf("%d%d%d%d",&dt[i].a,&dt[i].b,&dt[i].c,&dt[i].d);
mem(dp,);
for(int i=;i<=m;i++){
for(int j=;j*dt[i].b<=dt[i].a;j++){
for(int k=n;k>=j*dt[i].c;k--){
if(i)dp[i][k]=max(dp[i][k],dp[i-][k-j*dt[i].c]+j*dt[i].d);
else dp[i][k]=max(dp[i][k],dp[i][k-j*dt[i].c]+j*dt[i].d);
}
}
}
printf("%d\n",dp[m][n]);
}
return ;
}
Buns(dp+多重背包)的更多相关文章
- HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)
HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化) 题意分析 先把每种硬币按照二进制拆分好,然后做01背包即可.需要注意的是本题只需要求解可以凑出几种金钱的价格,而不需要输出种数 ...
- HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化)
HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化) 题意分析 给出一系列的石头的数量,然后问石头能否被平分成为价值相等的2份.首先可以确定的是如果石头的价值总和为奇数的话,那 ...
- HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化)
HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化) 题意分析 首先C表示测试数据的组数,然后给出经费的金额和大米的种类.接着是每袋大米的 ...
- poj1014 dp 多重背包
//Accepted 624 KB 16 ms //dp 背包 多重背包 #include <cstdio> #include <cstring> #include <i ...
- CodeForces922E DP//多重背包的二进制优化
https://cn.vjudge.net/problem/1365218/origin 题意 一条直线上有n棵树 每棵树上有ci只鸟 在一棵树底下召唤一只鸟的魔法代价是costi 每召唤一只鸟,魔法 ...
- BZOJ.3425.[POI2013]Polarization(DP 多重背包 二进制优化)
BZOJ 洛谷 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点.这样答案就是\(n-1\). 最大可到达点对数,容易想到找一个点\(a\),然后将其子树分为两部分\( ...
- hdu1059 dp(多重背包二进制优化)
hdu1059 题意,现在有价值为1.2.3.4.5.6的石头若干块,块数已知,问能否将这些石头分成两堆,且两堆价值相等. 很显然,愚蠢的我一开始并想不到什么多重背包二进制优化```因为我连听都没有听 ...
- ACM学习历程—HDU 1059 Dividing(dp && 多重背包)
Description Marsha and Bill own a collection of marbles. They want to split the collection among the ...
- POJ 1742 Coins ( 经典多重部分和问题 && DP || 多重背包 )
题意 : 有 n 种面额的硬币,给出各种面额硬币的数量和和面额数,求最多能搭配出几种不超过 m 的金额? 分析 : 这题可用多重背包来解,但这里不讨论这种做法. 如果之前有接触过背包DP的可以自然想到 ...
随机推荐
- 网易云课堂_C++开发入门到精通_章节7:模板
课时35类模板 类模板 创建类模板的实例 class Name<类型参数表>object; 类模板与模板类的区别 类模板是模板的定义,不是一个实实在在的类,定义中用到通用类型参数 模板类是 ...
- MD5加密算法(转)
获取字符串的MD5摘要 原文更详细: http://www.weixuehao.com/archives/474 代码如下: import java.security.MessageDigest; p ...
- ubuntu中文实训手册
http://people.ubuntu.com/~happyaron/udc-cn/lucid-html/ http://www.apachefriends.org/zh_cn/xampp-linu ...
- 怎样给你的Android 安装文件(APK)减肥
转自: http://greenrobot.me/devpost/putting-your-apks-on-diet/ Android的apk文件越来越大了这已经是一个不争的事实. 在Android ...
- Android应用程序组件Content Provider的共享数据更新通知机制分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6985171 在Android系统中,应用程序组 ...
- java学习笔记day06---匿名内部类
1.匿名内部类:其实就是内部类的简化形式,它所体现的就是一个类或者接口的子类对象.前提: 内部类必须继承或实现外部类或接口. 格式: new 父类&接口(){}; 其实就是 ...
- live555从RTSP服务器读取数据到使用接收到的数据流程分析
本文在linux环境下编译live555工程,并用cgdb调试工具对live555工程中的testProgs目录下的openRTSP的执行过程进行了跟踪分析,直到将从socket端读取视频数据并保存为 ...
- 批处理Bat实现整合定时关机或取消定时关机
@echo off :start choice /c:12 /m "输入1为设置定时关机,2为取消定时关机: " if errorlevel 2 goto cancel if er ...
- SQL SERVER中如何格式化日期(转)
原文地址:http://blog.sina.com.cn/s/blog_95cfa64601018obo.html 1. SELECT convert(varchar, getdate(), 10 ...
- c# 数据库缓存依赖
1.为缓存依赖项启动通知数据库 在vs开发人员命令提示中运行(切换到aspnet_regsql.exe所在目录,示例目录:C:\Windows\Microsoft.NET\Framework64\v4 ...