当前位置: 首页 > 知识库问答 >
问题:

用动态规划方法设计求解该问题的最有效算法

宋英杰
2023-03-14

假设你正在考试,你有120分钟的时间,但是你不能解决问题,因为你的时间有限。例如,完成问题所需的分数和时间如下。

在此输入图像描述

因此,我们需要使用动态规划方法设计最有效的算法来计算您将在可用时间内花费的最高点。

下面是我的代码;

static int maxPoints(int points[], int time[],int n) {
    
    if(n<=0) {
        return 0;
    }
    else {
        return Math.max(points[n-1]+maxPoints(points,time,(n-2)),
                time[n - 1] + maxPoints(points, time, (n - 1)));
    }
}


public static void main(String[] args) {
    int n=10;
    int points[]= {4,9,5,12,14,6,12,20,7,10};
    int time[]= {1,15,2,3,20,120};
    System.out.println();
    
}

但是我找不到正确的算法,你能帮我解决这个问题吗?

共有1个答案

充浩波
2023-03-14

在你的问题中,每个问题都有一个权重(所需的时间)和一个值(得到的分数)。总时间(或重量)有限制,你需要最大化点数(或值)。

这类似于0-1背包问题,可以使用动态规划轻松解决。

 类似资料:
  • 几天前,我在读关于分数背包问题的贪婪算法和动态规划的书,我发现这个问题可以用贪婪方法得到最优解。谁能给出一个例子或解决方案来解决这个问题的动态规划方法? 我知道贪婪方法是解决这个问题的最好方法,但我想知道动态规划是如何解决这个问题的。

  • 主要内容:动态规划算法的实际应用动态规划算法解决问题的过程和分治算法类似,也是先将问题拆分成多个简单的小问题,通过逐一解决这些小问题找到整个问题的答案。不同之处在于,分治算法拆分出的小问题之间是相互独立的,而动态规划算法拆分出的小问题之间相互关联,例如要想解决问题 A,必须先解决问题 B 和 C。 《贪心算法》一节中,给大家举过一个例子,假设有 1、7、10 这 3 种面值的纸币,每种纸币使用的数量不限,要求用尽可能少的纸币拼凑

  • 我目前正在学习动态编程,我无法解决这个问题。有人能给我一个算法吗?:考虑一个有向图G=(V,E),其中每个边都标有一个字母Sigma的字符,我们指定一个特殊的顶点s作为开始顶点,另一个f作为最后顶点。我们说G接受一个字符串a=a1a2。如果有一条从s到f的n条边的路径,其标号拼写为序列a。设计了一个O((V+E)n)动态规划算法来确定a是否被G接受。

  • 斐波那契数列 1. 爬楼梯 2. 强盗抢劫 3. 强盗在环形街区抢劫 4. 信件错排 5. 母牛生产 矩阵路径 1. 矩阵的最小路径和 2. 矩阵的总路径数 数组区间 1. 数组区间和 2. 数组中等差递增子区间的个数 分割整数 1. 分割整数的最大乘积 2. 按平方数来分割整数 3. 分割整数构成字母字符串 最长递增子序列 1. 最长递增子序列 2. 一组整数对能够构成的最长链 3. 最长摆动子

  • 我问了这个问题 求和的方法数S与N个数求和的所有方法从给定集合中求和给定数(允许重复) 不太明白那里的答案, 我写了两种方法来解决一个问题: 用数字N(允许重复)找出求和S的方法数 sum=4,number=1,2,3答案是1111、22、1122、31、13、1212、2112、2212 在一种方法中我使用记忆,而在另一种方法中我不使用。不知怎的,在我的机器中,记忆版本的运行速度比非记忆版本慢得

  • 我正在为动态编程编写一些复习材料。我需要提出如何划分子问题,计算出基本情况,并提出递归公式。 给定 n 个正整数 a1,a2,...,an、一个数字 k 和一个目标 W,我们希望选择一个子集 T,其总和恰好是 k 个元素,其总和最接近 W。每个元素只能选择一次。定义一个具有 3 个参数的子问题(即 C[x,y,z] = ...)。 我只处理过几个动态编程示例,从未处理过定义子问题时需要3个参数的示