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 ...
随机推荐
- 牛客练习赛13F m皇后
题目链接:https://ac.nowcoder.com/acm/contest/70/F 题目大意: 略 分析: 可以分成四步计算冲突:水平方向,垂直方向,左斜线方向,右斜线方向.只要会处理水平方向 ...
- Canvas & SVG
Canvas & SVG https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-dev ...
- Mysql Router 的集群
1. c:\mysql-router, c:\mysql-5.7.23, 这两个目录的bin都要加入path 2. c:\mysql-shell,在bin下,有一个 mysqlsh.exe, 双击,打 ...
- maven配置,jdk1.8
<!-- 局部jdk配置,pom.xml中 --> <build> <plugins> <plugin> <groupId>org.apac ...
- reshape
reshape 编辑 reshape是一种函数,函数可以重新调整矩阵的行数.列数.维数.在matlab命令窗口中键入doc reshape或help reshape即可获得该函数的帮助信息. B = ...
- ASP.NET Core 2.0 Cookie Authentication
using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Builder; using Microso ...
- React 学习(六) ---- 父子组件之间的通信
当有多个组件需要共享状态的时候,这就需要把状态放到这些组件共有的父组件中,相应地,这些组件就变成了子组件,从而涉及到父子组件之间的通信.父组件通过props 给子组件传递数据,子组件则是通过调用父组件 ...
- 皮皮虾FAQ
我们提供的软件,是市场上比较好操作的,如果有其他的软件也是可以使用我们的ip的 Windows 1.windows找不到粘贴的地方 window打开窗口后,请在屏幕右下角找小飞机,右键即可 2.win ...
- Spring MVC 使用介绍(三)—— Controller接口控制器
一.概述 Controller接口类图如下,其中,BaseCommandController已从Spring 4移除 基于继承Controller接口的方式已经不推荐使用,仅供学习参考 二.基于Con ...
- 使用poi将Excel文件转换为data数据
pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:// ...