• “黑神话·悟空”免安装在线玩,无视显卡等硬件要求!!
  • √ 游戏免下载安装 √ 5分钟随开随玩 √ 关机不计费!低至¥14.90/月!
🔥进入竞技-直面天命🔥

有n个任务,序号从1到n,每个任务需要的编辑时间为ti分钟。小明和小白需要在对其中k个任务中进行编 辑。 编辑的过程如下:n个任务按照顺序排列,他们删除n-k个任务,不改变剩下的k个任务的顺序。 然后小明选取全部任务的前面一部分任务(可能不选或所有任务),小白选取剩余的。相当于将任务从某个位置分 割成两部分,第一部分给小明,第二部分给小白。之后他们分别对各自的任务进行编辑,编辑所需的时间 取决于两者中较长的那个。 请帮助小明和小白选择任务和分割方式使编辑尽可能早 地完成。 输入描述 第一行包含一个整数T(

时间2023-09-16 18:26:32 提问来自 安徽省合肥市 的网友 分类创作 浏览403
测试用例的数量)。接下来的T行,每行包含两个整数n和k,分别表示任务总数和小明选取的任务数。然后是n行,每行一个整数ti,表示第i个任务的编辑时间。 输出描述:对于每个测试用例,输出一个整数,表示小明和小白完成编辑所需的最短时间。如果无法完成编辑,则输出-1。 解析:这是一个动态规划问题。我们可以使用dp[i][j]表示前i个任务中,小明选取j个任务时的最短编辑时间。状态转移方程为: dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + max(t[i], ti) 其中,dp[0][0] = 0,其他状态初始化为正无穷大。最后,遍历所有状态,找到最小值即可。 代码实现如下: ```python def min_edit_time(T, test_cases): dp = [[float('inf')] * (k + 1) for _ in range(len(test_cases))] dp[0][0] = 0 for i in range(len(test_cases)): n, k = test_cases[i] tasks = [int(x) for x in input().split()] t = sorted(tasks, reverse=True) for j in range(k + 1): for p in range(i, n): dp[p + 1][j] = min(dp[p + 1][j], dp[p][j - 1]) + max(t[p], tasks[p]) if j < k: dp[i + 1][j + 1] = min(dp[i + 1][j + 1], dp[i][j]) + max(t[i], tasks[i]) for i in range(len(test_cases), len(dp)): if dp[i][k] != float('inf'): return dp[i][k] return -1 ```

点击这里,进行内容创作

创作工场 免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用🔥专业版,更聪明、更完整、更原创!

上一篇 从原数列中挑出子数列(被挑出的子数列需要按照原来顺序排列,但不一定要连续)。需要满足条件,对于原数列a1, a2, ..., an的n个数中任意连续K个数,应该有x个数被包含在挑出的子数列中,x \in [L, R]。求满足条件的所有子数列的每个数之和。 输入:第一行是n, K, L, R 第二行n个数表示数列a1, a2, ..., an 输出一个数表示结果,结果需要对10^9+7取模 下一篇 当代青年能为国家统一、民族复兴做些什么?800字大学生论文