2017级新生周赛(八)题解

可以说是签到题:参考代码链接:http://paste.ubuntu.com/26155523/大学生活(一):贪心解法:将所有电影按结束时间从小到大排序,第一步选结束时间最早的那部电影。然后,接下来每一步选和上一步选中的电影不冲突且结束时间最早的电影。参考代码链接:http://paste.ubuntu.com/26155608/数学(一):在计算的过程中,会数据溢出,数据需要定义成长整型。参考代码链接:http://paste.ubuntu.com/26155678/午饭问题(一):模拟竖列式,思路和上周周赛的加法有相似之处,代码是照着上周周赛的参考代码写的,大家可以对照一下,加深理解,具体思路看代码。参考代码中有一个小例子模拟了一个简单的程序运行过程:12345。参考代码链接:http://paste.ubuntu.com/26155860/加密工作(一):这道题的参考代码用到了结构体,也可以不用,为的是让大家熟悉结构体的应用。参考代码链接:http://paste.ubuntu.com/26161722/体育课(一):这道题大家可能首先想到的是枚举,写18层循环,但是那样时间复杂度是:181716...32*1时间复杂度太高,所以需要优化,下面两种优化方式:1>递推:递推:从最后一行向上推,更新每个点的值,倒着思考(终点为第一行第一个点)。举一个例子:a[i][j]+=max(a[i+1][j],a[i+1][j+1]);              第i行,第j点  (i只能跳到 第i+1行j点j+1两点             若要更新第i行,第j点肯定是这两点 (第i+1行 j点 j+1点)到这点(第i行,第j点)的最优值。参考代码链接:http://paste.ubuntu.com/26161755/1>dp:开一个dp[][]数组, dp[i][j] 意味着跳到第i行,第 j个点的最优值。从第一行开始分别取每个点的最优值,每个点的值都不为负,所以列出下式:dp[i][j]=max(dp[i-1][j-1]+m[i][j],dp[i-1][j]+m[i][j]);第i行,第j个点的最优值等于:         (上一行 第j个点的最优值 +自身)、 (上一行第j-1个点的最优值+自身)两者中的最优值。         注意(每一行第一个点需特殊考虑,初始化dp[][]数组全为0,可不特殊考虑,个人喜好而定)参考代码链接:http://paste.ubuntu.com/26161771/时光跑得太快,溜了溜了:参考代码链接:http://paste.ubuntu.com/26161890/谢谢大家参与!

posted @ 2022-10-22 18:45  河南工业大学算法协会  阅读(19)  评论(0)    收藏  举报