1. 程式人生 > >第一篇Blog:NENU ACM集訓第六天:簡單的線性DP

第一篇Blog:NENU ACM集訓第六天:簡單的線性DP

線性DP比較經典的問題包括最大子段和、最長公共子序列、最長迴文子序列、最長遞增子序列、最長公共遞增子序列等。

最大不相交欄位和(poj 2479)

思路大概就是分別求[0~i-1]的最大子段和以及[i~n-1]的最大子段和,再加起來求最大的就可以了.

時間複雜度O(n).

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<math.h>
#include<cstdlib>
#include<stack>
#include<queue>
using namespace std;

int a[50001];
int Left[50001];
int Right[50001];

int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n;
        scanf("%d",&n);
        for(int i = 0;i<n;i++)
            scanf("%d",&a[i]);

        Left[0] = a[0];
        for(int i = 1;i<n;++i){
            if(Left[i-1] < 0)
                Left[i] = a[i];
            else
                Left[i] = Left[i-1] + a[i];
        }
        for(int i = 1;i < n;i++)
            Left[i] = max(Left[i],Left[i-1]);

        Right[n-1] = a[n-1];
        for(int i = n-2;i>=0;--i){
            if(Right[i+1] < 0)
                Right[i] = a[i];
            else
                Right[i] = Right[i+1] + a[i];
        }
        for(int i = n-2;i>=0;i--)
            Right[i] = max(Right[i],Right[i+1]);

            int Inf = -1000000;

            for(int i=1;i<n;i++)
                Inf = max(Inf,Left[i-1] + Right[i]);

             printf("%d\n",Inf);

    }
    return 0 ;
}

求最大公共子序列(LCS)的長度 (poj 1458)

dp[i,j]表示X的前i個字元和Y的前j個字元的最長公共子序列長度,  後面的就好理解了,

轉移方程 :

if(i==0||j==0) dp[i,j]=0;

else if(X[i]== Y[i]) dp[i,j] = dp[i-1,j-1]+1;

else dp[i,j]= max (dp[i-1,j],dp[j-1,i]);

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<math.h>
#include<cstdlib>
#include<stack>
#include<queue>
using namespace std;
#define N 500
int dp[N][N]={0};

int main(){
    int len1,len2;
    string str1,str2;
    while(cin>>str1>>str2){
        len1 = str1.length();
        len2 = str2.length();

        for(int i = 1;i<=len1;i++){
            for(int j = 1;j <= len2;j++){
                if(str1[i-1] == str2[j-1])
                    dp[i][j] = dp[i-1][j-1]+1;
                else
                    dp[i][j] = max(dp[i][j-1],dp[i-1][j]);
            }
        }
        printf("%d\n",dp[len1][len2]);
    }

    return 0 ;
}

End.

相關推薦

第一BlogNENU ACM集訓簡單線性DP

線性DP比較經典的問題包括最大子段和、最長公共子序列、最長迴文子序列、最長遞增子序列、最長公共遞增子序列等。 最大不相交欄位和(poj 2479) 思路大概就是分別求[0~i-1]的最大子段和以及[i~n-1]的最大子段和,再加起來求最大的就可以了. 時間複雜度O(n).

python學習python基礎(條件判斷、迴圈)

條件判斷   格式 if <條件判斷1>: <執行1> elif <條件判斷2>: <執行2> elif <條件判斷3>: <執行3> else: <執行4&g

python學習python基礎(dict、set)

dict   dict的支援,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)儲存,具有極快的查詢速度 建立&取值    為什麼dict查詢速度這麼快? 因為dict的實現原理和查字典是

檔案系統

1,儲存空間:資料區&元資料區 -----> 命令stat 2,元資料:檔名,大小,時間戳,許可權,屬主,屬組,對應的資料儲存在磁碟塊---->Index node(元資料編號:ls -i), 3,目錄:資料區儲存的是檔名和對應的inode編號。格式化是為了建立檔案系統 4,bitm

文件系統

自動掛載 code super 硬鏈接 tun device 編號 rtp block 1,存儲空間:數據區&元數據區 -----> 命令stat 2,元數據:文件名,大小,時間戳,權限,屬主,屬組,對應的數據存儲在磁盤塊---->Index node(

翻譯libevent參考手冊bufferevent概念和入門 (八) (轉)

bufferevent_setcb()函式修改bufferevent的一個或者多個回撥。readcb、writecb和eventcb函式將分別在已經讀取足夠的資料、已經寫入足夠的資料,或者發生錯誤時被呼叫。每個回撥函式的第一個引數都是發生了事件的bufferevent,最後一個引數都是呼叫buffereven

《微信小程式七日談》- 小程式devtool隱藏的祕密

《微信小程式七日談》系列文章: 第一天:人生若只如初見; 第二天:你可能要拋棄原來的響應式開發思維; 第三天:玩轉Page元件的生命週期; 第四天:頁面路徑最多五層?導航可以這麼玩; 第五天:你可能要在登入功能上花費大力氣; 第六天:小程式devtool隱藏的祕密 本系列

結構型模式--修飾器模式

零、修飾器模式 當我們相對一個物件新增新功能的時候,無非就是下面這三種方法: 直接修改物件所屬類 使用組合 使用繼承 這裡我們會優先考慮使用直接修改物件類,如果行不通我們會使用組合,最次的情況我

蒟蒻的第一blog

ima lin 生成樹 tex 樹形 最小生成樹 不能 聽說 line   啊……怎麽說呢,終於在cy大佬的引(you)導(huo)下開通了自己的blog。第一篇也不知道寫點啥,權當是未來展望吧23333 1、這裏都有些啥   emmm據大佬的話,主要是一些做題目時候的筆記

《Python量化交易教程》第一部分新手入門 1誰來給我講講Python?

一、量化投資視訊學習課程 二、Python手把手教學 第1天:誰來給我講講Python? PS: 1.注意使用方法,這個以後都有大用 2.注意符號的使用方式 3.儘量用英文表達 4.本日學習內容以及其他注意事項: 今天學習了Python的基本頁面、操作,以及幾種主要的容器型別,天還要學習Pyt

Spring Cloud原始碼分析之Eureka服務註冊

在文章《Spring Cloud原始碼分析之Eureka篇第四章:服務註冊是如何發起的 》的分析中,我們知道了作為Eureka Client的應用啟動時,在com.netflix.discovery.DiscoveryClient類的initScheduledT

2018/11/02 ACM集訓三次周賽題解及自身題目優化

問題 A: 珠心算測試 題目描述 珠心算是一種通過在腦中模擬算盤變化來完成快速運算的一種計算技術。珠心算訓練, 既能夠開發智力,又能夠為日常生活帶來很多便利,因而在很多學校得到普及。 某學校的珠心算老師採用一種快速考察珠心算加法能力的測驗方法。他隨機生成一個正

第一行程式碼——資料儲存全方案——詳解持久化技術

目錄: 6.1 持久化技術簡介 6.2 檔案儲存 6.2.1 將資料儲存到檔案中 6.2.2 從檔案中讀出資料 6.3 SharedPreferences 儲存 6.3.1 將資料儲存到SharedPreferences中 6.3.2 從SharedPreferenc

後端碼農談前端(CSS盒子模型

元素框的最內部分是實際的內容,直接包圍內容的是內邊距。內邊距呈現了元素的背景。內邊距的邊緣是邊框。邊框以外是外邊距,外邊距預設是透明的,因此不會遮擋其後的任何元素。 提示:背景應用於由內容和內邊距、邊框組成的區域。 一、CSS 內邊距屬性 屬性 描述 padding 簡寫屬性。作用是在一個宣告中

架構 Replica Sets複製集的搭建

1. 建立資料資料夾   mkdir -p  /mongodb/data/master      --主   mkdir -p /mongodb/log/   mkdir -p /mongodb/data/slaver         --備   mkdir -p /mongodb/log/   mkdi

第一blog

以前不知道網上的coder花時間寫blog幹嘛,需要的功能多了,寫的程式碼多了,遇到的自然bug多了,所以決定自己在漫長的學習工作之餘寫一些部落格,來記錄自己寫程式碼調程式的東西,以便回顧和方便他人。希望自己堅持下去!

JavaEye中的第一BLOG

這是自己在JAVAEYE中的第一篇BLOG,希望與大家共同學習和進步. 接觸 JAVA 算是兩年有餘了吧,始終感覺自己還是處於菜鳥的水準! 《JAVA核心技術一二卷》 《JAVA程式設計思想》 《JAVA

量化分析師的Python日記【4一大波金融Library來襲之scipy

Optimization terminated successfully. Current function value: 0.000000 Iterations: 52 Function evaluations: 63 Gradient eva

這是我的第一Blog,立個FLAG

    2016年底,我離開了自從畢業以後進入的第一家公司。     2014年7月離開了象牙塔進入社會大學,2年半的時間,從一個愣頭青年成長為一個準父親,身上的責任變得更加沉重。隨著接踵而至的經濟壓

跟著阿里p7一起學java高併發 - 18玩轉java執行緒池,這一就夠了

java中的執行緒池,這一篇就夠了 java高併發系列第18篇文章。 本文主要內容 什麼是執行緒池 執行緒池實現原理 執行緒池中常見的各種佇列 自定義執行緒建立的工廠 常見的飽和策略 自定義飽和策略 執行緒池中兩種關閉方法有何不同 擴充套件執行緒池 合理地配置執行緒池 執行緒池中執行緒數量的配置 什麼是執