自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(352)
  • 收藏
  • 关注

原创 最长上升子序列 Java

题目链接dp[i]表示以i-1位置结尾的数最长的上升子序列,模板是这个点击我查看既然以i-1结尾的话,那么我们就要从0开始遍历,如果nums[j]<nums[i]那么就有dp[i]=Math.dp[i]=Math.max(dp[i],dp[j]+1);不然dp[i]=1public int lengthOfLIS(int[] nums) { if(nums.length&lt...

2020-04-02 20:03:43 139

原创 丑数 II Java

题目链接丑数就是只包含质因数 2, 3, 5 的正整数,所以丑数就是,2,3,5的倍数,我们定义三个指针,开始分别指向同一个结点,如果这个数算过了就指向下一个数,等于在队列中加入数运算的结果依次弹出class Solution { public int nthUglyNumber(int n) { int[] dp=new int[101010]; dp[0...

2020-04-02 12:08:20 71

原创 完全平方数 Java

题目链接举个例子13很显然产生了重复子结构这里我们的dp保存的是构成i的最少的个数那么对于每个数来说,要么选他本身要么选他本身-他的倍数所以有dp[i]=Math.min(dp[i-j*j]+1,dp[i]);public int numSquares(int n) { int[] dp=new int[101010]; for(int i=0;i<10101...

2020-04-02 11:36:06 153

原创 打家劫舍 II Java

题目连接打家劫舍的进阶版,这里题意给的是连成了一个环,但是实际上运行的时候并没有按照环来运算,对于每一个要么选1,不能选最后一个,要么不选1,可以选择最后一个那么我们有dp转移方程dp[i]=Math.max(dp[i-1],dp[i-2]+nums[i]);public int rob(int[] nums) { if(nums.length==0){ r...

2020-04-01 06:33:13 149

原创 最大正方形 Java

题目链接题目大意:找出最大正方形的面积问题分析:找出正方形的边长即可dp[i][j]=min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1;既然是最大值为什么不是用max呢,原因如图所示很显然我们要选择边长最短的那个class Solution { public int maximalSquare(char[][] matrix) { if(m...

2020-04-01 02:19:25 143

原创 乘积最大子数组 Java

题目链接连续的数组,模型类似于LIS最长上升子序列点击我查看对于当前的点有选和不选两种,如果那么dp[i]=max(nums[i]*dp[i-1],nums[i]);但是显然对这题没有办法直接用这个转移方程因为他有负数,如果一个最大的数*负数那么他就是最小的我们可以利用这个原理那么,我们设置两个变量maxv,minv分别保存最大和最小的两个数,如果遇到负数那么我们交换两个数,最后从两个数中取最大的...

2020-03-31 06:59:53 131

原创 单词拆分 Java

题目链接题意,字符串s是否能完全用wordDict数组里面的字符串代替,每个字符串可以重复使用这里对于字符串来说,按照i来划分前后那么对于i以后想要可以拆分,那么i前面就要能够拆分这就是重复的子问题所以这题可以用动态规划dp[i]表示以i-1结尾的字符串是否能被wordDict中的字符串代替这里可以看下Java的substring方法和C++的不完全相同Substringpublic boolea...

2020-03-31 05:30:19 148

原创 三角形最小路径和 Java

题目链接经典的动态规划,有点类似于杨辉三角这里的下一条路由上一条路来推导出来dpi表示第i行时第j列的最优解这里我们使用空间压缩,dp[i]表示当前行的最优解对于dpidp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-1]);我们可以发现只用到了上一行的当前列的那个数和上一行当前列前面那一列的数那么我们可以用两个数preleft和pre分别保存两个值就可以压缩空间了dp...

2020-03-31 00:18:28 139

原创 不同的二叉搜索树 Java

题目连接首先是二叉搜索树的定义,对于每个顶点,他的左子树小于顶点,右子树大于等于顶点首先按照递归的思想从1开始划分那么左子树为空,右子树为2,3,又可以从2,3划分,那么一共可以组成2个,从2开始那么能组成1个,从3开始能组成2个,所以一共是5个那么按照动态规划的思想从底下向上划分,分别从1到2,1,3,1,4分别算出子序列能组成的个数,因为左边和右边不同组成结构要求笛卡尔积,则有 dp[i]+=...

2020-03-30 23:00:41 65

原创 不同路径 Java

题目链接题解int uniquePaths(int m, int n) { int[][]dp=new int[1010][1010]; for (int i = 0; i < m; i++) { dp[i][0] = 1; } for (int j = 0; j < n; j++) { ...

2020-03-28 19:03:54 85

原创 不同路径 II Java

题目链接思路在题目连接的思路上添加了如果有障碍那就那么dp就是0public int uniquePathsWithObstacles(int[][] obstacleGrid) { int m = obstacleGrid.length; int n = obstacleGrid[0].length; if (obstacleGrid[0][0] ...

2020-03-28 14:44:28 99

原创 解码方法 Java

题目链接因为解码中出现了两位数所以dp[i]=dp[i-1]+dp[i-2]但是这里是不对的,因为解码中可能出现错误码比如01,28可以分成2,8但是不能是28这个代码转自题解里面的具体我找不到了public int numDecodings(String s) { if(s.charAt(0)=='0') return 0; int[] m=new int[s.l...

2020-03-28 09:22:03 78

原创 除数博弈Java

题目链接这是一道博弈的题目,谁先到2谁就赢了,谁先到1谁就输了public boolean divisorGame(int N) { boolean[] dp = new boolean[101010]; dp[1] = false; dp[2] = true; for(int i = 3; i<=N; i++){ ...

2020-03-28 02:39:50 163

原创 使用最小花费爬楼梯Java

题目链接对于每个楼梯而言,有两种状态1.我的楼梯是从上一层上来的2.我的楼梯是从上上层上来的题目大意,我的可以上1层或者2层,到了层数之后,要花费cost层数的代价,对于最后一层不需要public int minCostClimbingStairs(int[] cost) { int[] dp=new int[101010]; dp[0]=cost[0]; ...

2020-03-27 22:31:26 108

原创 按摩师Java

题目链接和这题的模型一致,里面有讲解题目链接public int massage(int[] nums) { if(nums.length<=0){ return 0; } int[] dp=new int[101010]; dp[0] = 0; dp[1]=nums[0]; ...

2020-03-26 20:35:57 274

原创 连续数列Java

题目链接模型与点击我查看相同public int maxSubArray(int[] nums) { if(nums.length<=0){ return 0; } if(nums.length==1){ return nums[0]; } int[] dp=new...

2020-03-26 19:35:05 179

原创 判断子序列Java

题目链接dp表示 t从0到i是否能表示s从0到j1.如果t[i]==s[j] 那么就看t的前i个是否能表示s的前j个2.如果t[i]!=s[j] 那么就看t的前i个能否表示表示s的前j+1个例如 abcd abcde 当s[3]!=s[4] 其实他已经是一个子序列了public boolean isSubsequence(String s, String t) { if(s.len...

2020-03-26 07:18:32 152

原创 打家劫舍Java

题目链接对于dp来说,有两种选择1.选择相邻的那个2.选择相差相邻前面的那个加上当前的class Solution { public int rob(int[] nums) { if(nums.length<=0){ return 0; } int[] dp=new int[101010]; dp...

2020-03-26 01:42:58 100

原创 最长回文子串 Java版

这里题解可以参考以前的一篇文章题解Java版的却别就是substring和c++的substr不一样substring(index,endindex);从index开始到endindex结束public String longestPalindrome(String s) { if (s.length() == 1) { return s; ...

2020-03-24 22:43:22 85

原创 最大子序和 Java

题目链接这里对于每个数字有两种状态1.从前j-1个数的和的基础上继续加和[i-1]+nums[i]:2.不要前j-1个数nums[i];public int maxSubArray(int[] nums) { if(nums.length==1){ return nums[0]; } int[] dp=new int[nums...

2020-03-24 17:34:47 58

原创 爬楼梯Java

题目链接斐波那契额数列第 i 阶的方法总数就是到第 (i-1)(i−1) 阶和第 (i-2)(i−2) 阶的方法数之和。public int climbStairs(int n) { if(n<=2){ return n; } int[] dp=new int[n+1]; dp[0]=0;dp[1]=1;dp[2]=2; for(int...

2020-03-24 00:55:42 74

原创 LIS最长上升子序列

有一个长度为n的序列a1-an-1,求这个数列中最长的上升子序列的长度dp[i]以a[i]为结尾的最长子序列的长度那么对于a[i]来讲这个最长子序列可能只有a[i]如果j<i a[j]<a[i] 那么就有dp[i]=max(1,dp[j]+1);int ans = -999; for (int i = 0; i < n; i++) { dp[i] = 1;...

2020-03-11 01:00:00 55

原创 LCS 最长公共子序列

给定两个字符串,求他们的最长公共子序列s="abcd";t="bcde";如果s[i]==t[j]那么dp[i+1][j+1]=max(dp[i][j]+1,dp[i+1][j].dp[i][j+1]);如果不等dp[i+1][j+1]=max(dp[i+1][j].dp[i][j+1]);for (int i = 0; i < n; i++) { for (int j = 0...

2020-03-10 17:00:20 64

原创 动态规划专栏

01背包有n个重量价值分别为wi,vi的物品,从物品中挑选出重量不超过w的物品,求最大价值(只能选一个)dpi+1表示从0到i+1个物品中,重量不超过j时的最大价值for (int i = 0; i < n; i++) { for (int j = 0; j <= W; j++) { if (j < w[i]) { ...

2020-03-10 03:10:00 68

原创 配置JDK

1.下载点击我下载JDK2.点击3.点击4.接受5.安装后,点击电脑,属性,高级,环境变量6.下方系统变量新建7.变量名:JAVA_HOME,变量地址:JDK地址8.双击Path变量9.新建%JAVA_HOME%\bin%JAVA_HOME%\jre\bin完毕...

2020-03-04 21:30:25 74

原创 Java Web端口占用解决方法

方法1:1.双击你的服务器2.在文件内修改为可用端口3.Ctrl+S保存结束方法2:1.win+R 输入cmd2.输入netstat -ano3.找到占用端口号的ID,红色下划线的就是端口号,蓝色下划线的是ID号4.查看他是那个应用tasklist|findstr “ID号”5.如果是无关紧要的进程,那我们就嘿嘿嘿taskkill /f /t /pid “ID号”6.世界一片安静了,结束...

2020-03-04 13:24:07 600

原创 Java Web安装常见问题

1.端口占用解决方法:点击我进入2.环境变量未配置导致打不开解决方法:点击我配置JDK3.Tomcat安装在C盘据说是因为安装在C盘,需要管理权限启动解决方法:不放C盘不就可以了4.其他乱七八糟的问题解决方法1.百度,谷歌2.重装Tomacat,JDK,EClipse3.重装电脑如果以上不能解决你的问题,建议砸掉电脑换新最后附上环境变量,最后三个没有的别问,别问...

2020-03-04 03:21:34 105

原创 poj3280 Cheapest Palindrome

题目链接这里有一个字符串要把它转换成回文串下面有n个字符,然后每个字符的删除和添加的价格不一样问构成回文串时候要花费最少的钱是多少这里要用dpi表示的从i到j构成回文串时要花费的最少的钱数转移方程:dp[i][j] = min(dp[i + 1][j] + cost[s[i] - 'a'], dp[i][j - 1] + cost[s[j] - 'a']); if (s[i...

2020-03-01 07:18:27 97

原创 poj2385 Apple Catching

题目链接两棵苹果树,每棵树在某个时间落下一个苹果,然后可以移动w次,问t秒内可以拿到多少这里定义一个dp数组,因为可以移动w次,那么移动的就是第一棵树,第二棵树,第一个树,第二课树的来回移动,所以我们的dp数组dpi表示在时间i内第j次移动后能得到的最多的果实那么转移方程就是dpi = max(dpi - 1,dpi - 1);前一个时间内的移动和不移动的最大值当然这没有完,因为我们还要算当前的这...

2020-02-28 15:28:15 120

原创 poj3616 Milking Time

题目链接讲的是奶牛排队挤奶,挤完一次要休息r分钟,可以挤m次,问最多挤多少,n好像就没用到#include<algorithm>#include<iostream>#include<cstdio>using namespace std;int dp[101010];struct node { int l, r, w;}a[101010];b...

2020-02-28 01:57:10 71

原创 poj2229 Sumsets

题目链接这题也是动态规划的思想首先一个偶数可以分为,两个1或者2为基数一个奇数可以分为,它前一个偶数和1#include<iostream>#include<cstring>using namespace std;const long long int maxn = 1e6 + 10;const long long int mod = 1e9;long long...

2020-02-27 20:07:24 102

原创 poj3716 Cow Bowling

题目链接将动态规划的思想体现的很明白,下一层的状态由上一层推广出来#include<iostream>#include<algorithm>#include<cstring>using namespace std;int stair[1010][1010];int main(){ int n; cin >> n; ...

2020-02-27 11:43:15 87

原创 poj2718 Smallest Difference

题目链接题目大意,这些数组成两个数,且如果数不为0的话不以0开头这里直接组成所有的数然后计算出最小值,也可以用排列dfs+暴力#include<iostream>#include<algorithm>#include<algorithm>#include<cstring>#include<cstdio>#include<c...

2020-02-26 06:37:09 102

原创 poj3050 Hopscotch

题目链接每个位置可以重复利用,组成6位数字,上下左右走,问可以组成的个数直接dfs找到所有组成数然后丢到set容器中(不重复)最后输出set大小即可#include<iostream>#include<cstring>#include<set>using namespace std;int map[5][5];int ans[111100];set&...

2020-02-26 01:55:15 94

原创 算法训练 字符串合并

题目链接import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println(scanner.nextLine()+scanner.ne...

2020-02-25 01:18:10 63

原创 AOJ 0118 Property Distribution

题目连接这题讲的是,去找所有的连通块,大概和找水洼一样的dfs加染色#include<iostream>#include<cstring>using namespace std;char map[1010][1010];int vis[1010][1010];int num = 0;int dt[][2] = { {0,1},{1,0},{-1,0},{0,-1...

2020-02-24 11:31:03 84

原创 AOJ 0033

题目连接给n个10个数每10个数分为左边和右边两列让你按照从大到小的顺序排列成两列可以就是YES否则就是NO#include<iostream>using namespace std;int T[20];int n;int flag = 0;void dfs(int index,int left,int right) { if (index >= 10) { ...

2020-02-24 05:29:43 76

原创 poj1979 Red and Black

题目链接大概讲@出发,找所有能连接到的.的个数,@也算一个简单的深搜,模板题目#include<iostream>#include<cstring>using namespace std;char map[25][25];int vis[25][25];int n, m, ans;int dt[][2] = { {1,0},{-1,0},{0,1},{0,-1}...

2020-02-23 01:01:59 64

原创 Bribe the prisoners

动态规划这里dp不是代表第i到第j的位置而是代表区间内囚犯的值i到i+1中间没有囚犯i到i+2中间有一个囚犯i到i+3中间有两个囚犯所以j代表右端dp[i][j]=t+a[j]-a[i]-2#include<iostream>using namespace std;int dp[1010][1010];//存储第i到第j个囚犯时的花费int main(){ int p,...

2020-02-22 07:47:36 107

原创 poj3255 Roadblocks次短路径

题目链接题目描述,有R条路,N个路口,道路是双向通行,问1到N路口次短路口是多少。无向图,dijkstra的变形用了邻接图,优先队列w如果大于dis1,小于dis2,就更新次短路径#include<iostream>#include<vector>#include<cstdio>#include<queue>#include<algor...

2020-02-21 23:19:15 105

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除