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 ...
随机推荐
- vue-router路由懒加载(解决vue项目首次加载慢)
懒加载:----------------------------------------------------? 也叫延迟加载,即在需要的时候进行加载,随用随载. 为什么需要懒加载? 像vue这种单 ...
- 一个加载时带动画效果的ListBoxItem
今天我们来谈一下ListBoxItem这个控件,ListBoxItem是直接从ContentControl继承而来的,所以可以添加到任何具有Content属性的控件中去,常见的ListBoxItem可 ...
- Java对象clone()的测试
Object中自带native clone()方法. 研究了一下用法. public class DeepCopyTest { public static void main(String[] arg ...
- 用dbExpress页的SQLConnection1连接sql server2000怎么设置。 [问题点数:0分]
在d7或者c6已经支持了. 贡献一下我的代码吧:dbeConn:= TSQLConnection.Create(nil); dbeConn.Params.Clear; dbeC ...
- vue-cli: 渲染过程理解(vue create demo01方式创建)
1.根目录配置 vue.config.js, 设置入口文件: index.js module.exports = { pages:{ index: { entry: 'src/pages/home/i ...
- css伪元素之before和after
css里面的伪元素主要是用来给选择器设置特殊效果.根据常用性,记录before和after. “:before”伪元素用来在元素的内容前面添加新的元素.比如标题前面会有一个小方块,就可以通过‘ :be ...
- 在 Web 页面中使用离线地图
1. 所需工具&插件: 1. MapDownloader (提取码: spx6) 2. GISMysqlToLocalFile (提取码: vus6) 3. Leaflet 2. 操作: 1. ...
- Nginx 磁盘IO的优化
L:132
- 提高网络灵活性和效率的组网方式—SD-WAN
导读 最初,大多数企业只是简单地将软件覆盖添加到广域网连接上.但是,随着时间的推移,由于SD-WAN架构的易配置功能,企业将开始采用SD-WAN更复杂的功能. 广域网一般用于连接多个业务地点,如总部和 ...
- HTTP协议那些事儿(Web开发补充知识点)
HTTP协议 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的数据通信的基础. H ...