题目
t(t<=10000)组样例,
给定n(n<=1e3)天,有三种技能,三种技能的熟练度初始都为0,
第i天学第j种技能时,会令第j种技能的熟练度提高aij(0<=aij<=1e4)
第i天只能学一种技能,剩下两种技能没有学,
对于没有学的技能k,假设算上第i天后已经是连续第x天没有学技能k了,
则第k种技能的熟练度会减少x,熟练度下降的过程中,不会小于0
求n天之后,三种技能的熟练度之和的最大值
思路来源
官方题解
题解

首先,用根号的思想,每根号w天不学,就会下降超过一天学的收益,不如期间用一天学一下
然后,用dp的松弛思想,即,合理地改变规则,使得最优解还能被枚举到
最优解中,一个课程要么没学,要么学了之后,中间不会降到0以下
而降到0以下是不会影响到最优解的转移的,所以直接扣除即可
但是,其实最优解可能只学了一门或两门课程,所以状态中还需要标明一门课学没学
在代码实现中,dp[i][j][k][l]表示到了第i天时,第i天当天学的是第j门课,
对于没学的两门课来说,第一门课已经没学k天,第二门课已经没学l天时,最大的熟练度之和
特别地,当k=0、l=0时,代表这门课从来没有学过,一直为0,转移的时候不扣除天数
滚动掉第一维后,就只剩dp[2][3][205][205]了
预处理了一下,id[i][0]表示学课程i时没学的第一门课的标号,id[i][1]表示第二门课的标号
如果当天学的j,没学的第一门课连续没学k天,没学的第二门课连续没学l天,
动态规划解决技能熟练度最大化问题

文章讲述了如何使用动态规划和根号、松弛思想解决一个关于在有限天数内学习三种技能的问题,目标是最大化三种技能的熟练度之和,同时考虑技能间的相互影响和连续不学习导致的熟练度下降。
最低0.47元/天 解锁文章
1601

被折叠的 条评论
为什么被折叠?



