美文网首页动态规划动态规划
动态规划学习总结一

动态规划学习总结一

作者: fzkt | 来源:发表于2018-12-10 17:43 被阅读0次

动态规划

动态规划算法与分治法类似,其基本思想也是将待解决的问题分解为若干个子问题,先求解子问题,然后将这些子问题的解得到原问题的解。与分治法不同的是,适合于动态规划求解的问题,经分解后得到的子问题往往不是互相独立的。在用分治法求解问题的时候,有些子问题被重复计算多次。为了解决这个问题,动态规划用一个表记录所有以解决的子问题的答案,不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。

动态规划求解步骤

1 找出最优解的性质,并刻画其结构特征 

2 递归地定义最优解 

3 以自顶向上的方式计算出最优值 

4 根据计算最优值时得到的信息,构造最优解


问题一 单词拆分

给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定s 是否可以被空格拆分为一个或多个在字典中出现的单词。

说明:

拆分时可以重复使用字典中的单词。

你可以假设字典中没有重复的单词。

示例 1:

输入:s = "leetcode", wordDict = ["leet", "code"]输出:true解释:返回 true 因为 "leetcode" 可以被拆分成 "leet code"。

示例 2:

输入:s = "applepenapple", wordDict = ["apple", "pen"]输出:true解释:返回 true 因为"applepenapple"可以被拆分成"apple pen apple"。     注意你可以重复使用字典中的单词。

示例 3:

输入:s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]输出:false


解题思路

第一步,首先,我们先定义一个一维数组dp,长度为string.length + 1,默认dp[0] = true,dp[i]表示的意思就是,string字符串0~i的子串是否能够符合要求;

第二步,然后进行一次二重循环,第一重表示截取子串的起点,第二重表示截取子串的终点,如果当前截取的子串字典中出现过,那么dp[j] = dp[i] && dict.contains(s.substring(i, j))。

来源 链接:https://www.jianshu.com/p/7cfd6eaa905f

    public boolean wordBreak(String s, List<String> wordDict) {

        boolean[] dp = new boolean[s.length() + 1];

        dp[0] = true;

        for(int i = 0; i < s.length(); ++ i){

            for(int j = 1 + i; j <= s.length(); ++j){

                if(!dp[j])

                    dp[j] = dp[i] && wordDict.contains(s.substring(i,j));

            }

        }

        return dp[s.length()];

    }

相关文章

  • 动态规划学习总结一

    动态规划 动态规划算法与分治法类似,其基本思想也是将待解决的问题分解为若干个子问题,先求解子问题,然后将这些子问题...

  • 4. 动态规划算法

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

  • 动态规划走楼梯——序

    为什么学习动态规划 如何学习动态规划 动态规划的学习目标 大量参考Grandyang以及Code_Ganker大佬...

  • 动态规划 Dynamic Programming

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

  • 《数据结构与算法之美》27——初识动态规划

    前言 今天开始学习动态规划,一共有三节,分别是:初识动态规划、动态规划理论、动态规划实战。今天这一节就是初识动态规...

  • 动态规划系列学习总结一

    动态规划简介 动态规划思想 1. 算法思想:若要解决一个给定问题,可以先解其子问题,然后根据子问题的解组合出原问题...

  • 动态规划学习总结1 动态规划入门理解

    1.动态规划的本质: 递归 2.原问题(N) - >子问题(N-1)->原问题(N) 3.最优子结构: ​ ...

  • 动态规划问题总结

    动态规划学习总结 最近在学习算法,希望写一篇博客来记录自己学习过程和总结一下自己学到的东西,方便以后的归纳整理。我...

  • 动态规划总结

    1.dp[i]表示以A[i]结尾的最值 例子1:最大连续子序列和(洛谷P3009)dp[i]=max(dp[i-1...

  • 动态规划总结

    好像理论上,都是生成一个新的数组,从前往后一步步的走,不用想太多。列出新数组第 i 个值处的推到公式(基本上会与新...

网友评论

    本文标题:动态规划学习总结一

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