dp

Leetcode 322.零钱兑换

百般思念 提交于 2019-12-21 04:27:32
零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount 。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1 。 示例 1: 输入 : coins = [1, 2, 5], amount = 11 输出 : 3 解释 : 11 = 5 + 5 + 1 示例 2: 输入 : coins = [2], amount = 3 输出 : -1 说明 : 你可以认为每种硬币的数量是无限的。 给一些可用的硬币面值,又给了一个找零钱数,问最小能用几个硬币来组成。跟CareerCup上的9.8 Represent N Cents 美分的组成有些类似,那道题给全了所有的美分,25,10,5,1,然后给一个钱数,问所有能够找零的方法。 解法:动态规划DP。建立一个一维数组dp,dp[i]表示钱数为i时需要的最少的硬币数,dp[i] = min(dp[i], dp[i - coins[j]] + 1) 1 class Solution { 2 public int coinChange(int[] coins, int amount) { 3 if(amount==0) return 0; 4 5 int[] dp = new int [amount+1]; 6 dp[0]=0; // do not need any coin to

【leetCode-DP】198. 打家劫舍

南笙酒味 提交于 2019-12-21 01:12:36
结合我们的做题步骤: 1).定义一个能够清楚描述最优子问题的数组(明确数组描述的含义)。 2).找出数组元素之间的关系式(状态转移方程) 3).找出初始值 code: public static int rob(int[] nums) { //1.dp[i] 截至到第i户抢的最多金额 //2.状态转移方程 dp[i] = max(dp[i-2]+nums[i] , dp[i-1]) 在抢劫dp[i-2] + nums[i] 和抢劫dp[i-1]之间衡量 //3.初始化 int dp[] = new int[nums.length + 1]; dp[0] = 0; if(nums.length >= 1) dp[1] =nums[0]; for(int i = 2;i <= nums.length;i++){ dp[i] = Math.max(dp[i-2] + nums[i-1] ,dp[i-1]) ; } return dp[nums.length]; } 问题强化 问题和上面的题目一样,但是多了一个的限制条件 首尾两户相连,这样就形成了一个环。 说明:虽然成了一个环我们可以将其拆解成两个数组num1[],num2[] 。其中num1[0~n-2], num2[1~n-1] 对于这两个num数组分别使用上述dp方法处理取最大值即可。 来源: CSDN 作者: Grit_ICPC

Leetcode 312.戳气球

徘徊边缘 提交于 2019-12-20 20:31:39
题目: 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。 现在要求你戳破所有的气球。每当你戳破一个气球 i 时,你可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。 求所能获得硬币的最大数量。 说明: 你可以假设 nums[-1] = nums[n] = 1,但注意它们不是真实存在的所以并不能被戳破。 0 ≤ n ≤ 500, 0 ≤ nums[i] ≤ 100 示例: 输入: [3,1,5,8] 输出: 167 解释: nums = [3,1,5,8] --> [3,5,8] --> [3,8] --> [8] --> [] coins = 3*1*5 + 3*5*8 + 1*3*8 + 1*8*1 = 167 思路: 最后一个被戳破的气球,会把整个气球数组分成两部分。 可以用动态规划解决: 定义 dp [ i ] [ j ] : 从气球 i 到气球 j 所能达到的最大分数。 设置一个关系 i < k < j , nums[k] 是最后一个被戳破的气球。 可以得到状态转移方程: for( k, k∈(i, j) ) dp[ i ][ j ] =

LeetCode_221最大正方形

99封情书 提交于 2019-12-20 16:09:55
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximal-square 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 class Solution { public int maximalSquare ( char [ ] [ ] matrix ) { int row = matrix . length ; if ( row < 1 ) return 0 ; int col = matrix [ 0 ] . length ; if ( col < 1 ) return 0 ; //dp[i][j]记录以maxtrix[i][j]为右下角的最大正方形的面积 int [ ] [ ] dp = new int [ row ] [ col ] ; //单独取出第一行,第一列进行判断 int res = 0 ; for ( int j = 0 ; j < col ; j ++ ) { dp [ 0 ] [ j ] = matrix [ 0 ] [ j ] - '0' ; res = Math . max ( res

leetcode【高级】 矩阵中的最长递增路径 Java

无人久伴 提交于 2019-12-17 17:29:10
题干 给定一个整数矩阵,找出最长递增路径的长度。 对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。 示例 1: 输入 : nums = [ [ 9 , 9 , 4 ] , [ 6 , 6 , 8 ] , [ 2 , 1 , 1 ] ] 输出 : 4 解释 : 最长递增路径为 [ 1 , 2 , 6 , 9 ] 。 示例 2: 输入 : nums = [ [ 3 , 4 , 5 ] , [ 3 , 2 , 6 ] , [ 2 , 2 , 1 ] ] 输出 : 4 解释 : 最长递增路径是 [ 3 , 4 , 5 , 6 ] 。注意不允许在对角线方向上移动。 想法 一看有点回溯法那味儿了,但是仔细想了想 可以这样完成: 使用矩阵dp来保存最长路径 其中dp[x][y]表示从xy出发递增最长路径, 我们就只需要遍历矩阵取出最大就行 初始化dp全部为0 现在关键点就是: 确定了起点以后怎么找出最长路径, 比如说现在起点在x,y,,如果dp[x][y]>0说明已经处理过了不用管 否则就分别尝试上下左右四个方向,如果不越界且它大于现在的数,那么就更新长度,直接看代码很好懂 Java代码 class Solution { public int longestIncreasingPath ( int [ ] [ ] matrix ) {

leetcode 70.爬楼梯 golang实现

随声附和 提交于 2019-12-15 03:12:07
描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 思路 动态规划问题 1. 先找公式 dp[n] 表示第n阶 时的方法数 因为可以爬1 层或2层 那么 爬到第n层 是由第n-1层或者n-2层爬上去的 所以 dp[n] = dp[n-1] + dp[n-2] 2. 初始值 dp[1] = 1 dp[2] = 2 实现 func climbStairs ( n int ) int { if n == 1 { return 1 } else if n == 2 { return 2 } dp := make ( [ ] int , n + 1 ) dp [ 1 ] = 1 dp [ 2 ] = 2 for i := 3 ; i <= n ; i ++ { dp [ i ] = dp [ i - 1 ] + dp [ i - 2 ] } return dp [ n ] } 来源: CSDN 作者: tzh_linux

LightOJ - 1299 - Fantasy Cricket(DP, 数学)

℡╲_俬逩灬. 提交于 2019-12-11 07:35:39
链接: https://vjudge.net/problem/LightOJ-1299 题意: 考虑成,U位置的点要往后放,D位置往前放 Dp[i][j]表示处于i位置,还有j个U没有放下。 s[i] == 'D' : Dp[i][j] = Dp[i-1][j] j+Dp[i-1][j+1] (j+1) 把d放到前面空出来j的位置中的一个,或者是j+1中的一个同时j+1中的一个U再放下来。 s[i] == 'U' : Dp[i][j] = Dp[i-1][j-1]+Dp[i-1][j]*j 拿起当前U或者,拿起的同时放一个U 代码: // #include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<vector> #include<string.h> #include<set> #include<queue> #include<algorithm> #include<math.h> using namespace std; typedef long long LL; typedef unsigned long long ULL; const int MOD = 1e9+7; const int MAXN = 1e6+10; int n, m, k; char s[1010]; LL Dp[1010]

AEAI DP开发平台升级说明

末鹿安然 提交于 2019-12-10 01:26:35
本次发版的 AEAI DP_v3.5.0 版本为 AEAI DP _v3.4.0 版本的升级版本,该产品现已开源并上传至开源社区http://www.oschina.net/p/aeaidp。 1 升级说明 AEAI DP v3.5.0 版本是一次重大升级,在这次升级中 AEAI DP 像 AEAI ESB 一样支持远程热部署,甚至比 AEAI ESB 走的更远,准确的说 AEAI DP 支持更多(灵活)粒度的(按工程、模块、资源)部署模式,这样就像使用 PHP 、 Ruby 等动态脚本语言开发 Java Web 应用一样不用考虑重启服务器,而且支持远程一键部署,数通畅联的所有的外围产品 CRM 、 HR 、 EM 、 WM 都采用本次版本重构,方便后续更敏捷的升级和部署。 2 升级内容 提供增量远程热部署机制; 添加按钮操作授权机制; 添加多语言机制; 列表选择功能支持多选机制; 表格组件添加 link 、 image 、 imagelink 三种 cell 机制; PageBean 中添加对 RadioGroup 支持; HotServer 添加密码加密工具; 解决主从表功能模型在 Oracle 数据库:生成 SQLMap 文件名称处理问题; 解决 Oracle11G 保存时候, Date 字段时间精度丢失的问题; 解决应用重启时 Server 后台显示内存可能泄露问题。 3

[LeetCode] 44、通配符匹配

白昼怎懂夜的黑 提交于 2019-12-09 20:10:22
题目描述 给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。 ‘?’ 可以匹配任何单个字符。 ‘*’ 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。 示例: 输入: s = “aa” p = “a” 输出: false 解释: “a” 无法匹配 “aa” 整个字符串。 解题思路 此题模仿《剑指offer》的递归写法,会超时。要用动态规划。 思路1 , 思路2 。 动态规划四要素 :(推荐 思路1 的解释,思路2某些点不清晰) 状态表示 f [ i ] [ j ] f[i][j] f [ i ] [ j ] 表示 s 1 s1 s 1 的前 i i i 个字符,和 s 2 s2 s 2 的前 j ​ j​ j ​ 个字符,能否匹配。(下标从1开始计) 状态转移方程 如果 s 1 s1 s 1 的第 i i i 个字符和 s 2 s2 s 2 的第 j j j 个字符相同, 或者 s 2 s2 s 2 的第 j j j 个字符为 ′ ? ′ '?' ′ ? ′ : f [ i ] [ j ] = f [ i − 1 ] [ j − 1 ] f[i][j] = f[i - 1][j - 1] f

AEAI DP_V3.4.0_20150601升级说明

筅森魡賤 提交于 2019-12-09 10:06:24
本次发版的 AEAI DP_v3.4.0_20150601 版本为 AEAI DP _v3.3.0_20150228 版本的升级版本,该产品现已开源并上传至开源社区 http://www.oschina.net/p/aeaidp 。 升级说明 AEAI DP_v3.4.0_20150601 版本是一次常规升级,主要包括:登录页面添加验证码、同时支持移动开发,具体升级内容如下: 升级内容 1. 新特性 1) 登录页面添加验证码机制 2) 支持手机移动开发: a) 预置 jquery mobile 框架 b) 预置 jquery validation 验证框架 c) 基本功能模型提供两套手机模板,可以直接生成 html5 手机页面 2. BUG 修正 1) 修正主从表功能模型,弹出编辑框 Handler 生成报错的 BUG 3. 其他完善 1) FieldSet 元素 css 美化 2) 系统日志详情页面调整 3) 列表选择模板查询 Bar 调整 4) 安全管理授权页面美化调整 5) 创建功能向导的界面列表项顺序调整,跟技术手册上目录保持一致 升级步骤 除了直接使用最新 hotserver 和 dp studio 替换这种升级方式, v3.3.0 版本可以通过替换部分 jar 包方式升级 v3.4.0 版本,具体如下: 1. Miscdp Studio 设计器升级说明 先删除