DP总结
最长回文子序列
int lpsDp(char * str,int n){
int dp[n][n], tmp;
memset(dp,0,sizeof(dp));
for(int i=0; i<n; i++) dp[i][i] = 1;
// i 表示 当前长度为 i+1的 子序列
for(int i=1; i<n; i++){
tmp = 0;
//考虑所有连续的长度为i+1的子串. 该串为 str[j, j+i]
for(int j=0; j+i<n; j++){
//如果首尾相同
if(str[j] == str[j+i]){
tmp = dp[j+1][j+i-1] + 2;
}else{
tmp = max(dp[j+1][j+i],dp[j][j+i-1]);
}
dp[j][j+i] = tmp;
}
}
//返回串 str[0][n-1] 的结果
return dp[0][n-1];
}
最长递增子序列
public class Solution {
public int lengthOfLIS(int[] nums) {
if(nums==null || nums.length == 0) return 0;
int len = nums.length;
int[] dp = new int[len];
int[] ends = new int[len];
ends[0] = nums[0];
dp[0] = 1;
int right = 0;
int l=0;
int r=0;
int m=0;
for(int i=0;i<len;i++){
l = 0;
r = right;
while(l<=r){
m = l + (r-l)/2;
if(nums[i]>ends[m]){
l = m + 1;
}else{
r = m - 1;
}
}
right = Math.max(right,l);
ends[l] = nums[i];
dp[i] = l + 1;
}
int res = 0;
for(int i=0;i<len;i++){
res= Math.max(res,dp[i]);
}
return res;
}
}
Distinct Subsequences
public class Solution {
public int numDistinct(String s, String t) {
int len1 = s.length();
int len2 = t.length();
int[][] dp = new int[len2+1][len1+1];
for(int j=0;j<=len1;j++){dp[0][j] = 1;}
for(int i=0;i<len2;i++){
for(int j=0;j<len1;j++){
if(t.charAt(i) == s.charAt(j)){
dp[i+1][j+1] = dp[i][j]+dp[i+1][j];
}else{
dp[i+1][j+1] = dp[i+1][j];
}
}
}
return dp[len2][len1];
}
}
Decode Ways
public class Solution {
public int numDecodings(String s) {
if(s==null || s.length()==0) return 0;
char[] ca = s.toCharArray();
int n = ca.length;
if(n==1) return (ca[0]=='0')?0:1;
int[] dp = new int[n];
dp[0] = (ca[0]=='0')?0:1;
dp[1] = ((ca[0]!='0' && ca[1]!='0')?1:0) + (((ca[0]!='0')&&(ca[0]-'0')*10+(ca[1]-'0')<=26)?1:0);
if(n>2){
for(int i=2;i<n;i++){
dp[i] = 0;
if(ca[i]!='0'){
dp[i]+=dp[i-1];
}
if(ca[i-1]!='0' && ((ca[i-1]-'0')*10+(ca[i]-'0')<=26) ){
dp[i]+=dp[i-2];
}
}
}
return dp[n-1];
}
}
Edit Distance
public class Solution {
public int minDistance(String word1, String word2) {
int m = word1.length();
int n = word2.length(); int[][] dp = new int[m + 1][n + 1];
for(int i=0;i<=n;i++){dp[0][i] = i;}
for(int i=0;i<=m;i++){dp[i][0] = i;}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(word1.charAt(i) == word2.charAt(j)){
dp[i+1][j+1] = dp[i][j];
}else{
dp[i+1][j+1] = Math.min(Math.min(dp[i+1][j],dp[i][j+1]),dp[i][j])+1;
}
}
}
return dp[m][n];
}
}
Minimum Path Sum
public class Solution {
public int minPathSum(int[][] grid) {
int m = grid.length;
int n = grid[0].length;
int[][] dp = new int[m][n];
dp[0][0] = grid[0][0];
for(int i=1;i<m;i++){
dp[i][0] = dp[i-1][0]+grid[i][0];
}
for(int j=1;j<n;j++){
dp[0][j] = dp[0][j-1]+grid[0][j];
} for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j];
}
}
return dp[m-1][n-1];
}
}
Maximum Subarray
public class Solution {
public int maxSubArray(int[] nums) {
int currMax=nums[0],max=nums[0];
for(int i=1;i<nums.length;i++){
currMax=Math.max(currMax+nums[i],nums[i]);
max=Math.max(max,currMax);
}
return max;
}
}
Unique Paths II
public class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int width = obstacleGrid[0].length;
int[] dp = new int[width];
dp[0] = 1;
for (int[] row : obstacleGrid) {
for (int j = 0; j < width; j++) {
if (row[j] == 1)
dp[j] = 0;
else if (j > 0)
dp[j] += dp[j - 1];
}
}
return dp[width - 1];
}
}
Wildcard Matching
boolean[] match = new boolean[m+1];
match[0] = true;
for (int i = 0; i < m; i++) {
match[i+1] = false;
}
for (int i = 0; i < n; i++) {
if (p.charAt(i) == '*') {
for (int j = 0; j < m; j++) {
match[j+1] = match[j] || match[j+1];
}
} else {
for (int j = m-1; j >= 0; j--) {
match[j+1] = (p.charAt(i) == '?' || p.charAt(i) == s.charAt(j)) && match[j];
}
match[0] = false;
}
}
return match[m];
Regular Expression Matching
public class Solution {
public boolean isMatch(String s, String p) {
boolean[] match = new boolean[s.length()+1];
Arrays.fill(match,false);
match[s.length()] = true;
for(int i=p.length()-1;i>=0;i--){
if(p.charAt(i) == '*'){
for(int j=s.length()-1;j>=0;j--){
match[j] = match[j] ||match[j+1]&&(p.charAt(i-1)=='.'||s.charAt(j)==p.charAt(i-1));
}
i--;
}else{
for(int j=0;j<s.length();j++){
match[j] = match[j+1]&&(p.charAt(i)=='.'||p.charAt(i)==s.charAt(j));
}
match[s.length()] = false;
}
}
return match[0];
}
}
DP总结的更多相关文章
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
- 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...
- AEAI DP V3.7.0 发布,开源综合应用开发平台
1 升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...
- AEAI DP V3.6.0 升级说明,开源综合应用开发平台
AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...
- BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4026 Solved: 1473[Submit] ...
- [斜率优化DP]【学习笔记】【更新中】
参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...
- BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9812 Solved: 3978[Submit][St ...
- px、dp和sp,这些单位有什么区别?
DP 这个是最常用但也最难理解的尺寸单位.它与“像素密度”密切相关,所以 首先我们解释一下什么是像素密度.假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算 ...
- android px转换为dip/dp
/** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public int dipTopx(Context context, float dpValue) { final floa ...
- POJ 3254. Corn Fields 状态压缩DP (入门级)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
随机推荐
- js获取当前时间&js 页面时钟
js获取当前时间 //获取当前时间,格式YYYY-MM-DD function getNowFormatDate() { var date = new Date(); var seperator1 = ...
- HackerRank "Kitty and Katty"
It's more of a brain-teaser than a Game Theory problem.. #!/bin/python3 T = int(input().strip()) for ...
- SonarQube的安装、配置与使用
SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误,下面将会介绍一下这个工具的安装.配置以及使用. 准备工作: 1.jdk(不再介绍) 2.sonarqube:ht ...
- netbean7.2 改变maven插件的中心库地址
今天内网安装netbeans 7.2(因为所使用的JDK版本问题),但安装上去之后发现build failure,提示说仓库主机找不到,因为提示上说的是apache的仓库地址.看执行maven的输出可 ...
- JavaScript 数据验证类
JavaScript 数据验证类 /* JavaScript:验证类 author:杨波 date:20160323 1.用户名验证 2.密码验证 3.重复密码验证 4.邮箱验证 5.手机号验证 6. ...
- 算法库:boost安装配置
前提是电脑上已经装有VS. 1. 下载boost_1_60_0.zip并解压到所需位置 2. 双击bootstrap.bat生成b2.exe(新版)和bjam.exe(老版) 3. 双击b2.exe或 ...
- zhuang 定制iOS 7中的导航栏和状态栏
近期,跟大多数开发者一样,我也正忙于对程序进行升级以适配iOS 7.最新的iOS 7外观上有大量的改动.从开发者的角度来看,导航栏和状态栏就发生了明显的变化.状态栏现在是半透明的了,这也就意味着导航栏 ...
- java学习第四天
那些逻辑语言就基本了解下,今天想到了一个问题就是关于for和while的区别,从专业上来说,for和while基本上是相同的,但是for是只允许一次访问的,如果结束后就无法继续访问,而while则可以 ...
- JDK 环境变量设置
.net转JAVA了.记心不好,记录一下. 安装好jdk(64位)后找到我的电脑(右键)>属性>高级选项卡>环境变量>,里面有管理员的用户变量,有系统变量.我选的是系统变量.点 ...
- RMQ(范围最值问题)算法学习
RMQ算法适合求解对一个数组多次查询给定范围内的最值. 预处理操作: 令d[i,j]表示从i开始,长度为2^j的一段元素的最值,可以用递推公式写出d[i,j] = min{ d[i][j-1], d[ ...