题解:2018级算法第二次上机 Zexal的流水线问题

题目描述:

样例:

实现解释:

最基础的流水线调度问题,甚至没有开始和结束的值

知识点:动态规划,流水线调度

实现方法即得出状态转移方程后完善即可,设a[][i]存储着第一二条线上各家的时间花费,t[][i]存储着i处进行线路切换的花费,f[][i]存储着各线在i处的最小花费。

则对每一个f[][i]应有如下的转移方程:

f[0][1] = a[0][1];

f[1][1] = a[1][1];

f[0][i] = min(f[0][i-1]+a[0][i],f[1][i-1]+t[1][i-1]+a[0][i]);

f[1][i] = min(f[1][i-1]+a[1][i],f[0][i-1]+t[0][i-1]+a[1][i]);

前两个为初始定义,后两个为具体的转换。

min函数中前一个值表示直接在当前这条线的前一个结点前进的花费,后一个表示从另一条线的前一个结点先转移过来后再前进的花费。此时只有两条线因此只有这两种情况,所以比较后便可得出到达该线该位置的最小花费。

多条线的情况可参考:题解:说好的ALS呢?(后续添加链接)

最后比较到达n处(最后一个家)哪条线的时间花费最小即可。

坑点:

注意多次输入后数组的初始化,以及状态转移方程的正确转化即可

完整代码:

//流水线调度基本问题
#include<iostream>
using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	int n;
	int fend;
	int i;
	while(cin >> n)
	{
		int a[2][n+1],t[2][n];
		//两条线上每一家花费的时间
		for(i = 1;i<=n;i++)
			cin >> a[0][i];
		for(i = 1;i<=n;i++)
			cin >> a[1][i];

		//两条线不同位置转移的时间花费
		for(i = 1;i<n;i++)
			cin >> t[0][i];
		for(i = 1;i<n;i++)
			cin >> t[1][i];

		//存储两条线不同位置的最小时间
		int f[2][n+1];
		//初始化防止错误
		f[0][1] = a[0][1];
		f[1][1] = a[1][1];

		for(i = 2;i<=n;i++)
		{
			//具体状态转移方程介绍见实现解释
			if(f[0][i-1]+a[0][i]<f[1][i-1]+t[1][i-1]+a[0][i])
 				f[0][i] = f[0][i-1]+a[0][i];
			else
				f[0][i] = f[1][i-1]+t[1][i-1]+a[0][i];

			if(f[1][i-1]+a[1][i]<f[0][i-1]+t[0][i-1]+a[1][i])
				f[1][i] = f[1][i-1]+a[1][i];
			else
				f[1][i] = f[0][i-1]+t[0][i-1]+a[1][i];
		}
		//计算两条线分别的最后时间花费得最小值
		if(f[0][n]<f[1][n])
			fend = f[0][n];
		else
			fend = f[1][n];
		cout << fend << ‘\n‘;
	}
	return 0;
}

  

原文地址:https://www.cnblogs.com/doUlikewyx/p/11700784.html

时间: 2024-07-30 13:34:10

题解:2018级算法第二次上机 Zexal的流水线问题的相关文章

题解:2018级算法第二次上机 Zexal的排座位

题目描述: 样例: 实现解释: 一道看似复杂但实际既是斐波那契变形的题目 知识点:递推,斐波那契 通过问题的描述,可以得到以下规律:(除了座位数为一时)男生坐最后时,倒数第二个一定是女生:女生坐最后,倒数第二个均可.转化:i个位置时男生结尾的情况数等于i-1个位置时女生结尾的情况数,i个位置时女生结尾的情况数等于i-1个位置时的总情况数. 于是便可得出两种解决方案:斐波那契变形和直接循环递推 斐波那契变形: i位置男生结尾的情况 = i-1位置女生结尾情况数 = i-2位置总情况数 i位置女生结

题解:2018级算法第二次上机 Zexal的竞赛

题目描述: 样例: 实现解释: 一道需要一点思考的动态规划题目 知识点:动态规划,数据记录 首先将题目描述调整:分别输入不同分数的题目总分(便于后续计算),当获得了i分数的总分后无法获得i-1和i+1的总分. 于是便可先利用score[i]储存i分数的总分数,用dp[i]储存以前i个分数为范围进行题目选择时的最大可获得分数.dp便是动态规划所用的数组. 于是可得状态转移方程如下: dp[0] = score[0]; dp[1] = score[1]; dp[i] = max(dp[i-2]+sc

题解:2018级算法第二次上机 Zexal的钢管切割

题目描述: 样例: 实现解释: 经典钢管切割问题的变形:最赔钱切割 知识点:动态规划,钢管切割 实现方法即得出状态转移方程后完善为代码即可,先设数组price[i]存储着i长度钢管切割后的最小值,p[i]存储着i长度钢管不切割的值,price数组既是本问题的dp数组. 经过分析可知状态转移方程为: price[0] = 0; price[i] = min(p[1]+price[i-1],p[2]+price[i-2],...p[i-1]+price[1],p[i]); 因为price[i]已经是

P2-2017级算法第二次上机 A ModricWang‘s Real QuickSort Query

题目描述 羊瑞大佬说:"现在的年轻人啊,写个快排都能写错,比如那个辣鸡的ModricWang"觉得他说的情况是真的,决定帮自己复习一下快排的写法. 快排的一个基础操作就是划分(partition),就是将当前的数组分为前后两个部分. 一种较为经典的partition方法是,将数组中处于中间位置(注意,只和位置有关,和大小无关)的元素作为分隔元素,然后将小于它的元素放到左侧,大于它的元素放到右侧,然后对左右两侧分别进行递归操作.在此题中为了统一,如果数组长度为偶数,取靠后的一个作为分隔元

2017级算法第二次上机-C.芸如的入学测试

这道题考察的实际就是一个简单的前缀和问题.值的注意的还是取模的问题.两个数取模,以防万一,出现对负数取模的问题 可以先加上mod然后再对mod取模. 能long long就不int #include <algorithm> #include <iostream> using namespace std; const int maxlen = 1e6 + 10; const int mod = 10007; long long ar[maxlen]; long long prefix

2017级算法第二次上机-E.SkyLee的图书整理

这道题考察了map函数的使用,map最简单的理解就是把一个数映射到一个数.然后使用map也类似hash数组的方法即可 map的头文件是<map> map<int,int> 将一个数映射到一个数 #include <algorithm> #include <iostream> #include <map> using namespace std; int main(){ int n,t,x,i,j,k; while(~scanf("%d

P2-2017级算法第二次上机 C 第k顺序统计量

题目描述 给定3个整数A, B, C, 和数组第一个数a[1].数组a由如下方式得到.询问a中第k小的数是多少. for(int i = 2; i <= 3000000; ++i) a[i] = ((1LL * a[i - 1] * A ^ B) + C) % 1000000007; 输入 多组组数据,每组数据一行,数据组数不超过7 每行5个整数A, B, C, a[1], k (保证五个数为int范围内正整数且k在3000000范围内) 输出 对于每组数据,输出一行,第k小的数. 输入样例 4

解题报告——-2018级2016第二学期第三周作业

解题报告——2018级2016第二学期第三周作业 A:[NOIP2002P]过河卒 题目: 描述 如图,A 点有一个过河卒,需要走到目标 B   点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点.例 如上图 C  点上的马可以控制 9 个点(图中的P1,P2 … P8 和 C).卒不能通过对方马的控制点. 棋盘用坐标表示,A 点(0,0).B 点(n,m)(n,m 为不超过 20  的整数,并由键盘输入)

解题报告——2018级2016第二学期第二周作业

解题报告——2018级2016第二学期第二周作业 D:迷宫问题 题目描述: 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. 输入 一个5 × 5的二维数组,表示一个迷宫.数据保证有唯一解. 输出 左上角到右