• 最长回文子序列

    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总结的更多相关文章

  1. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4142  Solved: 1964[Submit][Statu ...

  2. 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 ...

  3. AEAI DP V3.7.0 发布,开源综合应用开发平台

    1  升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...

  4. AEAI DP V3.6.0 升级说明,开源综合应用开发平台

    AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...

  5. BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4026  Solved: 1473[Submit] ...

  6. [斜率优化DP]【学习笔记】【更新中】

    参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...

  7. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][St ...

  8. px、dp和sp,这些单位有什么区别?

    DP 这个是最常用但也最难理解的尺寸单位.它与“像素密度”密切相关,所以 首先我们解释一下什么是像素密度.假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算 ...

  9. android px转换为dip/dp

    /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public int dipTopx(Context context, float dpValue) { final floa ...

  10. POJ 3254. Corn Fields 状态压缩DP (入门级)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9806   Accepted: 5185 Descr ...

随机推荐

  1. twig一些常用的用法总结【原创】

    在使用Symphony项目时,需要一些常用的twig,经过自己做的几个项目,自己的总结如下: 一.twig-数据判断 有时候在使用后台传给前台数据时需要判断是否有这个值,(是否为空(”或null)或是 ...

  2. filter and listener

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. 使用 Serv ...

  3. ruby&mongo_mapper

    mongo_mapper&ruby Mongomapper 用户mongo数据库配置,以及其提供了很多mongo的方法,可以很好地用来 对mongo相关封装和操作. 环境准备:gem inst ...

  4. 数据库&数据仓库

    数据仓库的定义: 世界公认的数据仓库概念创始人W.H.Inmon在<数据仓库>(Building the Data Warehouse)一书中对数据仓库的定义是:数据仓库就是面向主题的.集 ...

  5. 【练习】数据移动---parfile导出表中指定行:

    要求: ①创建存放数据的文件: ②使用默认的bad文件生成方式: ③使用truncate选项方式. 1.准备条件: [oracle@host03 ~]$ mkdir datadump [oracle@ ...

  6. OLAT & OLTP

    联机事务处理(OLTP)和联机分析处理(OLAP)的不同,主要通过以下五点区分开来. 用户和系统的面向性: OLTP是面向顾客的,用于事务和查询处理 OLAP是面向市场的,用于数据分析 数据内容: O ...

  7. SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)

    原文地址:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个 ...

  8. css之让文字在一定范围内显示,不超过固定的宽度和高度

  9. DescriptionResourcePathLocationType Dynamic Web Module 3.0 requires Java

    先保证ide的所有jdk都在1.6及以上,如果还是错就试试下面的 在<build></build>中添加 <plugins> <plugin> < ...

  10. VerbalExpressions ——另类正则表达式

    对于文本处理来说,正则表达式无疑是一个非常强大的工具.但是编写和阅读正则表达式往往就不是那么一件非常愉快的事情了.本文在这里介绍另一种另类的正则表达式——VerbalExpressions,它采用函数 ...