面包师Lavrenty打算用馅料做几个面包,然后把它们卖掉。

Lavrenty有\(n\)克面团和\(m\)种不同的馅料。馅料种类的下标从\(1到m\),他知道他的第\(i\)种馅料剩下\(a_i\) 克,做一个第\(i\)种馅料的面包,恰恰需要\(b_i\)克的\(i\)种馅料和\(c_i\)克的面团,同时这种面包可以卖\(d_i\)块钱。

他也可以做没有馅的面包。每个这样的面包需要\(c_0\)克面团,可以卖\(d_0\)块Tugrik。所以Lavrenty可以做任何数量的包子,用不同的馅料或者不用馅料,除非用完了面团和馅料。Lavrenty会扔掉烘培面包后剩下的所有多余材料。

求出Lavrenty可以赚取的钱的最大数量。

输入格式

第一行4个整数n,m,\(c_0,d_0\) \(1<=n<=1000,1<=m<=10\)

接下来m行每行四个整数\(a_i,b_i,c_i,d_i\) \(1<=a_i,b_i,c_i,d_i<=100\)

输出格式

输出Lavrenty可以赚取的最大钱数

样例输入

10 2 2 1

7 3 2 100

12 3 1 10

样例输出

241

题解

很好的一道多重背包模板,然而却似乎没有很多人做?

这里放上两份代码,一份详细一份简单

#include<bits/stdc++.h>
#define maxm 50
#define maxn 1500
#define maxa 150
using namespace std;
inline char get(){
static char buf[3000],*p1=buf,*p2=buf;
return p1==p2 && (p2=(p1=buf)+fread(buf,1,3000,stdin),p1==p2)?EOF:*p1++;
}
inline int read(){
register char c=get();register int f=1,_=0;
while(c>'9' || c<'0')f=(c=='-')?-1:1,c=get();
while(c<='9' && c>='0')_=(_<<3)+(_<<1)+(c^48),c=get();
return _*f;
}
int n,m;//n表示面团总数,m表示馅料种类
int a[maxn],d[maxn],b[maxn],c[maxn];
/*
a表示第i种馅料剩余数量
b表示第i种要的馅料数量
c表示第i种要的面团数量
d表示收益
*/
int dp[maxm][maxn];//第一维遍历面包种类,第二维遍历面团
int num;
int note[maxm][maxn];
int main(){
//freopen("1.txt","r",stdin);
n=read();m=read();
c[1]=read();d[1]=read();a[1]=0;b[1]=0;
//cout<<n<<m<<endl;
int out=-1;
for(register int i=2;i<=m+1;i++)a[i]=read(),b[i]=read(),c[i]=read(),d[i]=read();
for(register int i=1;i<=m+1;i++){//遍历面包种类
for(register int j=0;j<=n;j++){//遍历面团重量
for(register int k=0;k*b[i]<=a[i] && k*c[i]<=n;k++){
if(j>=c[i]*k){
dp[i][j]=max(dp[i-1][j-c[i]*k]+d[i]*k,dp[i][j]);
}
}
//cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
out=max(out,dp[i][j]);
}
}
cout<<out<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[1500],d[1500],b[1500],c[1500];
int dp[15][1500];
int main(){
n=read();m=read();
cin>>c[1]>>d[1];a[1]=0;b[1]=0;
for(int i=2;i<=m+1;i++)a[i]=read(),b[i]=read(),c[i]=read(),d[i]=read();
for(int i=1;i<=m+1;i++){
for(int j=0;j<=n;j++){
for(int k=0;k*b[i]<=a[i] && k*c[i]<=n;k++){
if(j>=c[i]*k)dp[i][j]=max(dp[i-1][j-c[i]*k]+d[i]*k,dp[i][j]);
}
out=max(out,dp[i][j]);
}
}
cout<<out<<endl;
return 0;
}

[CF106C]Buns的更多相关文章

  1. Buns(dp+多重背包)

    C. Buns time limit per test 2 seconds memory limit per test 256 megabytes input standard input outpu ...

  2. 数学分析 + 容斥原理 - URAL 1907 Coffee and Buns

    Coffee and Buns Problem's Link: http://www.bnuoj.com/v3/contest_show.php?cid=6415#problem/H Mean: 给定 ...

  3. cf D. Physical Education and Buns

    http://codeforces.com/contest/394/problem/D 题意:给你n个数,然后通过操作使得这n个数变为一个等差数列,操作是可以经过小于等于k次加1或减去1,要使得k尽量 ...

  4. Codeforces 394D Physical Education and Buns 胡搞

    题目链接:点击打开链接 题意:给定n个数的序列(能够排序) 操作一次能够使得某个数++或--. 问最少操作几次使得序列变成一个等差序列 输出: 第一行输出最少操作的次数 第二行输出等差数列里的最小项 ...

  5. So many many foods here!

    水果类(fruits):西红柿 tomato 菠萝 pineapple 西瓜watermelon 香蕉banana 柚子 shaddock (pomelo) 橙子orange 苹果apple 柠檬le ...

  6. The 10 best sweet treats in Singapore

    Every time I walk out of Changi airport's air-conditioning into the humid outdoors, there's a sweet ...

  7. BZOJ1695 : [Usaco2007 Demo]Walk the Talk

    观察单词表可以发现: 对于长度为3的单词,前两个字母相同的单词不超过7个 对于长度为4的单词,前两个字母相同的单词不超过35个 于是首先$O(26*26*nm)$预处理出 s1[x][i][j]表示( ...

  8. codeforces D. Queue 找规律+递推

    题目链接: http://codeforces.com/problemset/problem/353/D?mobile=true H. Queue time limit per test 1 seco ...

  9. R与数据分析旧笔记(十一)数据挖掘初步

    PART 1 PART 1 传统回归模型的困难 1.为什么一定是线性的?或某种非线性模型? 2.过分依赖于分析者的经验 3.对于非连续的离散数据难以处理 网格方法 <Science>上的文 ...

随机推荐

  1. springmvc错误集锦-dubbo包含低版本的spring包,依赖的时候应该排除Caused by: java.lang.reflect.MalformedParameterizedTypeException

    dubbo 常见错误 1. Caused by: java.lang.reflect.MalformedParameterizedTypeException 启动时报错,原因是dubbo 依赖 spr ...

  2. JS获取MVC Attrbuate验证是否通用

    直接用JQValidate的方法,$("#FeedBackForm").valid(); 当结果是true表示验证通过,false时表示验证失败~

  3. maven 环境变量 设置

    Maven安装与配置   一.需要准备的东西 1. JDK 2. Eclipse 3. Maven程序包 二.下载与安装 1. 前往https://maven.apache.org/download. ...

  4. Jboot使用appassembler-maven-plugin插件生成启动脚本

    appassembler-maven-plugin介绍: 使用appassembler-maven-plugin插件可自动生成跨平台的启动脚本,可省去手工写脚本的麻烦,而且还可以生成jsw的后台运行程 ...

  5. ORALCE表的约束条件

    一.主键:(PRIMARY KEY) 主键是表中的一列或多列.为表定义主键有如下几个作用: 1.主键包含的列不能输入重复的值,以此来保证一个表的所有行的唯一性: 2.主键也不允许定义此约束的列为NUL ...

  6. Flink的部署

    Flink的部署 环境准备:windows7系统,本地连接.如果打开更改适配器设置后没有本地连接,可以通过驱动精灵等软件安装网卡驱动.为了使部署在虚拟机上的服务器可以与物理机进行连通,必须使物理机的网 ...

  7. usb之鼠标作为按键输入

    1. 首先搞清楚,鼠标点左键.右键等能得到什么数据,然后分析这些数据上报事件即可. 第一个基本点:usb_alloc_urb函数,创建一个struct urb结构体,只能使用这个函数来创建,它是urb ...

  8. django-models 数据库取值

    django.shortcuts import render,HttpResponse from app01.models import * # Create your views here. def ...

  9. DNS服务器的简介——2

    生成HTTP报文后,因为我们输入的是服务器的域名,但在包体的发送中需要的是服务器的IP地址,所以接下来的工作就是查找服务器的IP地址,而查询IP地址,就需要DNS服务器来帮忙了. IP地址简介: IP ...

  10. kali aquatone安装

    https://www.jianshu.com/p/418eedb9d9c8