感觉好难,看了很久,说一下自己的理解。 首先,先不考录答案中的翻转,还是想是一个直角在左下角的三角形。 要明白如果某一个任务要执行,那么就意味着以这个任务为左上角的直角三角形中的任务必须都执行,这样才能满足依赖。 然后,解法中的dp[i][j][k]表示的是考虑到a[n-j+1][i]时且选择他执行的情况下,使得执行任务的个数恰好为k时的最优解。有些绕口..... 重点是这个选择的顺序,根据依赖的特性,如果执行了某个任务,就相当与执行了一个三角形,然后在已经执行的任务所形成的直角三角形斜边上,在从最底层向上像铺台阶一样铺一层,就能满足这一层上的所有依赖!!! 所以,这个sum[i][j]其实是从直角三角形的底边,按照从左向右的顺序选择斜边的起点,然后一层一层的判断的。这样就能保证满足依赖了,同时k用来满足个数的限制。画画图就好理解了。所谓的+sum[i][j]就是在第i个斜边上从底向上铺j个任务,dp[i - 1][std::max(0, j - 1)][k - j]则用来满足依赖。
点赞 3

相关推荐

陈逸轩1205:可以在学校旁标211的
点赞 评论 收藏
分享
牛客网
牛客企业服务