美文网首页
Java 算法 - 流浪剑客斯温(动态规划)

Java 算法 - 流浪剑客斯温(动态规划)

作者: 琼珶和予 | 来源:发表于2018-03-06 00:08 被阅读0次

题意

在物质位面“现实”中,有n+1个星球,分别为星球0,星球1,……,星球n。

每一个星球都有一个传送门,通过传送门可以直接到达目标星球而不经过其他的星球。

不过传送门有两个缺点。

第一,从星球i通过传送门只能到达编号比i大,且与i的差不超过limit的星球。

第二,通过传送门到达星球j,需要cost[j]个金币。

现在,流浪剑客斯温到达星球0后身上有m个金币,请问他有多少种方法通过传送门到达星球n?

样例

给出 n = 1, m = 1, limit = 1, cost = [0, 1],返回 1。
解释:
方案1:星球0→星球1

给出 n = 1, m = 1, limit = 1, cost = [0, 2],返回 0。
解释:
无合法方案

给出 n = 2, m = 3, limit = 2, cost = [0, 1, 1],返回 2。
解释:
方案1:星球0→星球1→星球2

方案2:星球0→星球2
给出 n = 2, m = 3, limit = 2, cost = [0, 3, 1],返回 1。
解释:
方案1:星球0→星球2

注意事项

1 <= n <= 50, 0 <= m <= 100, 1 <= limit <= 50, 0 <= cost[i] <= 100。
由于cost[0]没有意义,题目保证cost[0] = 0。

1.解题思路

  这道题肯定使用动态规划来解决,解决动态规划的问题通常来说,难点在于动态规划方程怎么推导。
  首先我们定义一个二维的dp[m + 1][n + 1],其实dp[i][j],表示有i那么的钱,到达j的次数,所以这个问题求解的是dp[m][n]的值
  其次,将dp[i][0]初始化为1,默认到0都为1次。
  此时我们需要求解i~n范围的值。当剑客到达i星球,它上一个的星球在[min, i)范围里面,其中max = Math.max(i - limit, 0)。然后我们来遍历从这个范围里面到i星球,如果这个星球能够到达i星球,那么使i星球的次数加上到达这个星球的次数。

2.代码

    public long getNumberOfWays(int n, int m, int limit, int[] cost) {
        int dp[][] = new int[m + 1][n + 1];
        //初始化dp数组
        for(int i = 0; i <= m; i++){
            
            dp[i][0] = 1;
        }
        for(int i = 1; i <= n; i++){
            int max = Math.max(0, i - limit);
            for(int j = max; j < i ; j++)
            {
                //从cost[i]开始判断,因为之前的肯定不能调到i星球
                for(int k = cost[i]; k <= m; k++){
                    dp[k][i] += dp[k - cost[i]][j];
                }
            }
        }
        return dp[m][n];
    }

相关文章

  • Java 算法 - 流浪剑客斯温(动态规划)

    题意 样例 注意事项 1.解题思路   这道题肯定使用动态规划来解决,解决动态规划的问题通常来说,难点在于动态规划...

  • 4. 动态规划算法

    1. 动态规划算法总结2. 漫画:什么是动态规划?3.算法之动态规划4. 动态规划-算法

  • Swift 算法实战:动态规划

    Swift 算法实战:动态规划 Swift 算法实战:动态规划

  • 2019-11-04 回溯算法

    package others; import java.util.Arrays; /** 动态规划算法计算10个工...

  • 程序员算法基础——动态规划

    程序员算法基础——动态规划 程序员算法基础——动态规划

  • 动态规划

    --tags: 算法,动态规划 动态规划解题 引入:动态规划 和贪心法 都是算法的思想方法 贪心算法——像 第一类...

  • 动态规划 Dynamic Programming

    从运筹学和算法的角度综合介绍动态规划 算法分类总结动态规划与静态规划的关系浅析静态规划和动态规划动态规划解非线性规...

  • 动态规划-js

    动态规划 参考:算法分析与设计-贪心&动归 漫画:什么是动态规划? 【数据结构与算法】 DP 动态规划 介绍 介绍...

  • 面试大纲

    基础算法 排序 查找 动态规划 并发编程 复习资料 《java并发编程的艺术》 https://redspider...

  • 动态规划

    动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...

网友评论

      本文标题:Java 算法 - 流浪剑客斯温(动态规划)

      本文链接:https://www.haomeiwen.com/subject/dqgkfftx.html