codevs1260 快餐问题
题意:
一个套餐需要a个A,b个B,c个C。
你生产一个A需要t1,一个B需要t2,一个C需要t3时间。
你有n台机器。每台每天工作timei时间。
一件物品只能在一个机器上生产。
求你一天最多能生产多少套餐。
每天ABC产量上限是100,n<=10
解:
这个DP的状态表示真是奇怪..
有一种做法是设f[i][j][k][l]表示前i台机器生产j个A,k个B,l个C的最大套餐数量。
被我的 1 1 1 2 2 2 3 3 2 1 卡掉了,输出1,答案是0
还有一种做法是设f[i][j][k][l]表示前i台机器生产j个A,k个B,l个C的所需最少时间。
这是zbtrs提供的。我还没思考。但是直觉上感觉很不对劲....
最后是我用的,f[i][j][k]表示前i台机器生产j个A,k个B时所能生产的最多C数量。
一开始预处理出最大套餐值和最大ABC值。
转移就是枚举这一台/之前的机器生产了多少A和B,然后计算出C来。
注意,一开始的时候可能会从f[0][x][y]之类的不存在的状态转移过来。
解决方案是赋值为-1,特判。初值是f[0][0][0] = 0
有几个剪枝:第一个是这条生产线不能生产更多的A和B了,这时要break
还有就是这个状态的C已经满了,此时不用继续枚举转移了,直接出转移(goto flag)。
然后就把很吓人的时间复杂度剪下去了。
#include <cstdio>
#include <algorithm>
#include <cstring>
#define say(a) printf(#a); printf(" = %d \n", a)
const int N = ; int f[][N][N], time[N];
int a, b, c;
int t1, t2, t3; int main() {
int n;
scanf("%d%d%d", &a, &b, &c);
scanf("%d%d%d", &t1, &t2, &t3);
scanf("%d", &n);
int sum = , ans = ;
for(int i = ; i <= n; i++) {
scanf("%d", &time[i]);
sum += time[i];
}
int lm = sum / (a * t1 + b * t2 + c * t3);
int maxA = std::min(lm * a, );
int maxB = std::min(lm * b, );
int maxC = std::min(lm * c, ); memset(f, -, sizeof(f));
f[][][] = ;
for(int i = ; i <= n; i++) {
f[i][][] = ;
}
for(int i = ; i <= n; i++) {
for(int j = maxA; j >= ; j--) {
for(int k = maxB; k >= ; k--) {
/// get f[i][j][k]
for(int jj = j; jj >= ; jj--) {
for(int kk = k; kk >= ; kk--) {
if(time[i] < (j - jj) * t1 + (k - kk) * t2) {
goto flag;
}
if(f[i - ][jj][kk] == -) {
continue;
}
f[i][j][k] = std::max(f[i][j][k],
f[i - ][jj][kk] + (time[i] - (j - jj) * t1 - (k - kk) * t2) / t3);
if(f[i][j][k] >= maxC) {
goto flag;
}
}
}
flag:
int now = std::min(j / a, k / b);
now = std::min(now, f[i][j][k] / c);
ans = std::max(ans, now);
}
}
} printf("%d", ans);
return ;
}
AC代码
codevs的数据很弱。强数据在洛谷上。
codevs1260 快餐问题的更多相关文章
- DP擎天
DP! 黄题: 洛谷P2101 命运石之门的选择 假装是DP(分治 + ST表) CF 982C Cut 'em all! 树形贪心 洛谷P1020 导弹拦截 单调队列水题 绿题: 洛谷P1594 护 ...
- 白条VS花呗,快餐式消费金融成巨头新战场
在这一次的国庆假期前,90后网红密子君吃空麦当劳事件引发了网友们的热议.短短半个小时,这位90后网红就吃光了25包薯条,随后又吃下两杯麦旋风,其疯狂举动引得四周食客纷纷围观拍照.那么,是什么刺激这位9 ...
- xsank的快餐 » Python simhash算法解决字符串相似问题
xsank的快餐 » Python simhash算法解决字符串相似问题 Python simhash算法解决字符串相似问题
- 实现快餐配送页面jq
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>快 ...
- 8.3.2018 1 Quick and dirty 快而脏的快餐
Quick and dirty 快而脏的快餐 BEIJING 北京 Food delivery is a booming business. Waste is piling up, too 送餐 ...
- Tensorflow快餐教程(1) - 30行代码搞定手写识别
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lusing/article/details ...
- 云栖社区 Tensorflow快餐教程
云栖社区 Tensorflow快餐教程(1) - 30行代码搞定手写识别:https://yq.aliyun.com/articles/582122云栖社区 Tensorflow快餐教程(2) - 标 ...
- 快餐问题(dp好题)
Peter最近在R市开了一家快餐店,为了招揽顾客,该快餐店准备推出一种套餐,该套餐由A个 汉堡,B个薯条和C个饮料组成.价格便宜.为了提高产量,Peter从著名的麦当劳公司引进了N条 生产线.所有的生 ...
- 从零开始学习jQuery (六) AJAX快餐
一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章讲解如何使用jQuery方便快捷的实现A ...
随机推荐
- 【学亮IT手记】jQuery DOM操作-获取内容和属性
jQuery拥有可操作HTML元素和属性的强大方法. 其中非常重要的部分就是操作DOM的能力. DOM--文档对象模型. <!DOCTYPE html> <html> < ...
- day 7-21 pymysql模块
一.安装的两种方法 第一种: #安装 pip3 install pymysql 第二种: 二.链接,执行sql,关闭(游标) import pymysql user = input("use ...
- Field tTypeMapper in com.atguigu.project.service.imp.projectInfoServiceImpl required a bean of type 'com.atguigu.project.mapper.TTypeMapper' that could not be found.
解决:MapperScan
- LODOP打印控件进行批量打印
Lodop打印控件批量打印的方式:1.批量打印每页内容相同的:(1)批量打印相同内容的很多纸张,可以设置打印份数,把该内容打印出多份.2.批量打印每页不同内容的:(1)通过在一个任务中分页,循环添加页 ...
- Spring Boot 构建电商基础秒杀项目 (十) 交易下单
SpringBoot构建电商基础秒杀项目 学习笔记 新建表 create table if not exists order_info ( id varchar(32) not null defaul ...
- 学习 Spring (九) 注解之 @Required, @Autowired, @Qualifier
Spring入门篇 学习笔记 @Required @Required 注解适用于 bean 属性的 setter 方法 这个注解仅仅表示,受影响的 bean 属性必须在配置时被填充,通过在 bean ...
- Matlab提供了两种除法运算:左除(\)和右除(/)
Matlab提供了两种除法运算:左除(\)和右除(/).一般情况下,x=a\b是方程a*x =b的解,而x=b/a是方程x*a=b的解.例:a=[1 2 3; 4 2 6; 7 4 9]b ...
- nodejs eggjs框架 爬虫 readhub.me
最近做了一款 高仿ReadHub小程序 微信小程序 canvas 自动适配 自动换行,保存图片分享到朋友圈 https://gitee.com/richard1015/News 具体代码已被开源, ...
- Suffix
$ 题目描述 给定一个序列\(A\),请你输出\(\sum_{1< i< j < k < h}A_iA_jA_kA_h(mod ~~1e9+7)\) \(Solution\) ...
- ubuntu18.4 中 mysql5.7 全完卸载与安装
卸载 sudo apt-get autoremove --purge mysql-server-5.7 sudo apt-get remove mysql-server sudo apt-get au ...