A Bamboo的小吃街

分析

经典的两条流水线问题,题目描述基本类似于课件中的流水线调度,符合动态规划最优子结构性质

关键的动态规划式子为:

dp[0][j] = min(dp[0][j - 1], dp[1][j - 1] + t[1][j - 1]) + p[0][j] //保存在左边第j个店铺时已经用的时间

dp[1][j] = min(dp[1][j - 1], dp[0][j - 1] + t[0][j - 1]) + p[1][j] //保存在右边第j个店铺时已经用的时间

即到达i边第j个店铺,可以从i边第j-1个店铺过来,也可以从另一边的j-1个店铺过来,后者需要加上过马路的时间;两者都要加上在第i边第j个店铺停留的时间

最后比较dp[0][n-1]和dp[1][n-1],找到最小值即为所求。

循环店铺数,同时更新两边的时间。

伪代码

dp[2][maxx]
p[2][maxx]
t[2][maxx]
//dp[0][j] 在左边第j家店时已经用的时间
//p t 如题所示
dp[0][0]=p[0][0]
dp[1][0]=p[1][0]
for j=1:n
dp[0][j] = min(dp[0][j - 1], dp[1][j - 1] + t[1][j - 1]) + p[0][j]
dp[1][j] = min(dp[1][j - 1], dp[0][j - 1] + t[0][j - 1]) + p[1][j]
end
取两者中较小者

代码

const int maxx = 510;
int dp[2][maxx];
int p[2][maxx];
int t[2][maxx];
int main()
{
int n;
while (~scanf("%d", &n))
{
memset(dp, 0, sizeof(dp));
int i, j;
for (i = 0; i<2; i++)
for (j = 0; j<n; j++)
scanf("%d", &p[i][j]);
for (i = 0; i<2; i++)
for (j = 0; j<n - 1; j++)
scanf("%d", &t[i][j]); dp[0][0] = p[0][0];
dp[1][0] = p[1][0];
for (j = 1; j<n; j++)
{
dp[0][j] = min(dp[0][j - 1], dp[1][j - 1] + t[1][j - 1]) + p[0][j];
dp[1][j] = min(dp[1][j - 1], dp[0][j - 1] + t[0][j - 1]) + p[1][j];
}
long long ans = dp[0][n - 1]<dp[1][n - 1] ? dp[0][n - 1] : dp[1][n - 1];
printf("%lld\n", ans);
}
}

2016级算法第三次上机-A.Bamboo的小吃街的更多相关文章

  1. 2016级算法第三次上机-B.Bamboo和巧克力工厂

    B Bamboo和巧克力工厂 分析 三条流水线的问题,依然是动态规划,但是涉及的切换种类比较多.比较易于拓展到n条流水线的方式是三层循环,外层是第k个机器手,里面两层代表可切换的流水线 核心dp语句: ...

  2. 2016级算法第三次上机-G.Winter is coming

    904 Winter is coming 思路 难题.首先简化问题, \(n\) 个0与 \(m\) 个1排成一列,连续的0不能超过x个,连续的1不能超过y个,求排列方法数. 显然会想到这是动态规划. ...

  3. 2016级算法第三次上机-C.AlvinZH的奇幻猜想——三次方

    905 AlvinZH的奇幻猜想--三次方 思路 中等题.题意简单,题目说得简单,把一个数分成多个立方数的和,问最小立方数个数. 脑子转得快的马上想到贪心,从最近的三次方数往下减,反正有1^3在最后撑 ...

  4. 2016级算法第三次上机-F.ModricWang的导弹防御系统

    936 ModricWang的导弹防御系统 思路 题意即为:给出一个长度为n的序列,求出其最长不降子序列. 考虑比较平凡的DP做法: 令\(nums[i]\) 表示这个序列,\(f[x]\) 表示以第 ...

  5. 2016级算法第三次上机-E.ModricWang's Polygons

    930 ModricWang's Polygons 思路 首先要想明白,哪些多边形可能是格点正多边形? 分情况考虑: 三角形不可能,因为边长为有理数的正三角形的面积为无理数,而格点三角形的面积为有理数 ...

  6. 2016级算法第三次上机-D.双十一的抉择

    915 双十一的抉择 思路 中等题.简化题目:一共n个数,分成两组,使得两组的差最接近0,就是说要使两组数都尽可能的接近sum/2. 思路还是很混乱的,不知道如何下手,暴力也挺难的,还不能保证对.想一 ...

  7. 2016级算法第六次上机-E.Bamboo之吃我一拳

    Bamboo之吃我一拳 分析 当两个点的距离<=d时,才可以出拳,想要使得满足出拳条件的点对最少但不为0 寻找最近点对距离,得到的最近距离能够使得可以出拳的组数最少,因为除了最近点对外其他组合均 ...

  8. 2016级算法第六次上机-A.Bamboo之寻找小金刚

    Bamboo之寻找小金刚 分析 可以抽象为许多连续线段,分别计数左拐和右拐的个数.考察叉积的基础应用. 假设ABC三点构成一个夹角∠ABC,B就是拐点,AC是辅助形成夹角.考虑线段AB和BC形成的向量 ...

  9. 2016级算法第五次上机-B.Bamboo&APTX4844魔发药水

    Bamboo&APTX4844魔发药水 题意 "于是,Bamboo耐着性子,看巫师从袖子里掏出 M 瓶时光泉水和 K 粒绿色能量.每瓶时光泉水重量为 c ,生发效果为 l:每粒绿色能 ...

随机推荐

  1. ROS tf 编程指南

    ROS (Robot Operating System, 机器人操作系统)是最知名的机器人操作系统,广泛应用于无人驾驶和机器人,tf(transforms,坐标系转换)是ROS下的一个常用的工具库.r ...

  2. Linux静态库与动态库详解

    引言 为了代码的复用性和模块化,我们常常使用一些库文件,在Windows操作系统下位.lib .dll作为静态库和动态库的后缀名. 在Linux下,静态链接库名字一般为libabcdef.a,其中ab ...

  3. python准确判断文件类型

    判断文件类型在开发中非常常见的需求,怎样才能准确的判断文件类型呢?首先大家想到的是文件的后缀,但是非常遗憾的是这种方法是非常不靠谱的,因为文件的后缀是可以随意更改的,而大家都知道后缀在linux系统下 ...

  4. CentOS 7 升级内核 Kernel

    安装kernel 首先安装elrepo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.e ...

  5. 如何优雅地使用命令行设置windows文件关联

    如何优雅地使用命令行设置windows文件关联 使用ftype查看帮助 设置关联所需命令有ftype assoc,需要管理员权限.如果忘记使用方法可通过ftype的帮助获取查看方法 C:\WINDOW ...

  6. 关于HBase的memstoreFlushSize。

    memstoreFlushSize是什么呢? memstoreFlushSize为HRegion上设定的一个阈值,当MemStore的大小超过这个阈值时,将会发起flush请求. 它的计算首先是由Ta ...

  7. [原创]Linux下使用Daemon实现服务器永久存活

    很多服务器端设计者,很少会考虑到服务器永久存活或热替换的问题,貌似真的很少 其中永久存活最大的理论支持就是,我们如何真正的保证一组服务器持续的存在,即便宕机? 其实没有人能保证自己写的代码那么完美无瑕 ...

  8. 实践作业3:白盒测试----第三次小组会DAY8

    我们小组于12月11日在东九教学楼召开了会议,小组第二次会议中就讨论了被测系统中风险最高的模块,于是选择管理员的教师添加模块,针对代码展开静态评审.这一次会议,小组主要讨论了应该从哪些方面来测评代码的 ...

  9. [GO]结构体指针变量初始化

    package main import "fmt" func main() { type student struct { id int name string sex byte ...

  10. ceph常用命令(转)

    原文:http://michaelkang.blog.51cto.com/1553154/1698287 一:ceph集群启动.重启.停止 1:ceph 命令的选项如下: 选项简写描述 --verbo ...