https://vijos.org/p/1243 (题目链接)

题意

  一个产品的生产有m个步骤,一共n个机器人。机器人i完成步骤j的时间为T[i][j],每次当产品从一个机器人那里移动到另一个机器人那里需要时间K,每个机器人不能持续工作L个步骤。问最少能在多少时间内完成。

Solution

  看起来题目变量非常多,其实想一想就能列出dp方程:${f[i][j]}$表示第${i}$个机器人完成第${j}$个步骤,一共完成前${j}$个步骤所需要的最短时间;${s[i][j]}$表示第${i}$个机器人做完前${j}$个步骤所需要的时间,那么:$${f[i][j]=min(f[k][l]+s[i][j]-s[i][l]+K)}$$

  其中${k∈[1,n]}$且${k≠j}$,${l∈[j-L,j-1]}$。

  但是这样的话复杂度有点高。。我们发现${n}$的范围只有5,我们可以从这里下手解决问题。如果对单独的一个机器人1号考虑,将dp方程转换一下:$${f[i][j]=min((f[1][l]-s[i][l])+s[i][j]+K)}$$

  我们发现括号里的东西与j无关,可以用单调队列维护,所以我们开n个单调队列进行维护,问题就解决了。

代码

// vijos1243
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=100010;
int s[10][maxn],l[10],r[10],q[10][maxn],p[10][maxn],f[10][maxn];
int n,m,K,L; int main() {
scanf("%d%d%d%d",&m,&n,&K,&L);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++) scanf("%d",&s[i][j]),s[i][j]+=s[i][j-1];
for (int i=1;i<=n;i++) l[i]=r[i]=1,q[i][1]=0,p[i][1]=0;
for (int j=1;j<=m;j++) {
for (int i=1;i<=n;i++) {
while (l[i]<=r[i] && p[i][l[i]]<j-L) l[i]++;
f[i][j]=q[i][l[i]]+s[i][j]+K;
}
for (int i=1;i<=n;i++)
for (int k=1;k<=n;k++) if (k!=i) {
while (l[k]<=r[k] && q[k][r[k]]>=f[i][j]-s[k][j]) r[k]--;
q[k][++r[k]]=f[i][j]-s[k][j];
p[k][r[k]]=j;
}
}
int ans=inf;
for (int i=1;i<=n;i++) ans=min(ans,f[i][m]);
printf("%d",ans-K);
return 0;
}

  

【vijos1243】 生产产品的更多相关文章

  1. vijos P1243 生产产品(单调队列+DP)

      P1243生产产品   描述 在经过一段时间的经营后,dd_engi的OI商店不满足于从别的供货商那里购买产 品放上货架,而要开始自己生产产品了!产品的生产需要M个步骤,每一个步骤都可以在N台机器 ...

  2. 刷题总结——生产产品(vijo1243)

    题目: 描述 在经过一段时间的经营后,dd_engi的OI商店不满足于从别的供货商那里购买产品放上货架,而要开始自己生产产品了!产品的生产需要M个步骤,每一个步骤都可以在N台机器中的任何一台完成,但生 ...

  3. vijos 1243 生产产品 DP + 单调队列优化

    LINK 题意:有1个产品,m个步骤编号为1~m.步骤要在n个机器人的手中生产完成.其中,第i个步骤在第j个机器人手中的生产时间给定为$T[i][j]$,切换机器人消耗cost.步骤必须按顺序,同一个 ...

  4. Vijos P1243 生产产品 (单调队列优化DP)

    题意: 必须严格按顺序执行M个步骤来生产一个产品,每一个步骤都可以在N台机器中的任何一台完成.机器i完成第j个步骤的时间为T[i][j].把半成品从一台机器上搬到另一台机器上也需要一定的时间K.每台机 ...

  5. Vijos 1243 生产产品 (单调队列优化的动态规划)

    题意:中文题.不说了. 注意一些地方,机器的执行过程是没有顺序的,而且每个机器可以用多次.第一次执行的机器不消耗转移时间K. 用dp[i][j]表示第i个机器完成第j个步骤的最短时间,sum[j][i ...

  6. 2018.10.23 vijo1243生产产品(单调队列优化dp)

    传送门 这道单调队列真的有点难写啊. 方程感觉挺简单的. f[i][j]f[i][j]f[i][j]表示在第iii个车间结束前jjj次步骤的最小代价. 然后用单调队列毒瘤优化一下就行了. 代码: #i ...

  7. vijos 1243 生产产品

    貌似两年前联赛复习的时候就看过这题 然而当时大概看看了 感觉太难 便没有去做 如今再去做的时候 发现其实也并不容易 ------------------------------------------ ...

  8. Java多线程系列--“基础篇”11之 生产消费者问题

    概要 本章,会对“生产/消费者问题”进行讨论.涉及到的内容包括:1. 生产/消费者模型2. 生产/消费者实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p ...

  9. Lingo求解线性规划案例1——生产计划问题

    凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 说明: Lingo版本:                            某工厂明年根据合同,每个季度末 ...

随机推荐

  1. 启动Eclipse后卡在 android sdk content loader 的解决办法

    Make sure that eclipse is not active. If it is active kill eclipse from the processes tab of the tas ...

  2. 使用PHP获取根域名的方法!

    /** * 取得根域名 * @param type $domain 域名 * @return string 返回根域名 */ function GetUrlToDomain($domain) { $r ...

  3. 2016.11.14测试 长乐一中2014NOIP复赛模拟题 第一题。

    1.正确答案 [题目描述] 小H与小Y刚刚参加完UOIP外卡组的初赛,就迫不及待的跑出考场对答案. "吔,我的答案和你都不一样!",小Y说道,"我们去找神犇们问答案吧&q ...

  4. 通用权限管理系统组件3.9 的 Oracle 数据库创建脚本参考

    ---------------------------------------------------- -- Export file for user USERCENTER -- -- Create ...

  5. CGI、FastCGI和PHP-FPM关系图解

    CGI.FastCGI和PHP-FPM关系图解   webapp即是php解析器等 当Web Server收到 index.php 这个请求后,会启动对应的 CGI 程序,这里就是PHP的解析器.接下 ...

  6. Power of Two

    Given an integer, write a function to determine if it is a power of two. bool isPowerOfTwo(int n) { ...

  7. nginx图片处理相关

    nginx本身有支持图片处理的模块,通过外部插件也可以实现此功能. libgd的安装 前提是要有libgd的库文件, (1)去官网访问主页没问题,下载文件还是FQ下的,为了方便大家提供一个链接:htt ...

  8. Hadoop: MapReduce2的几个基本示例

    1) WordCount 这个就不多说了,满大街都是,网上有几篇对WordCount的详细分析 http://www.sxt.cn/u/235/blog/5809 http://www.cnblogs ...

  9. 汤姆大叔的6道javascript编程题题解

    看汤姆大叔的博文,其中有篇(猛戳这里)的最后有6道编程题,于是我也试试,大家都可以先试试. 1.找出数字数组中最大的元素(使用Math.max函数) var a = [1, 2, 3, 6, 5, 4 ...

  10. SQL Server中的索引结构与疑惑

    说实话我从没有在实际项目中使用过索引,仅知道索引是一个相当重要的技术点,因此我也看了不少文章知道了索引的区别.分类.优缺点以及如何使用索引.但关于索引它最本质的是什么笔者一直没明白,本文是笔者带着这些 ...