DP問題已知思路情況下寫錯了如何Debug

2021-07-31 09:42:01 字數 1469 閱讀 6882

以計蒜客cs109 刪除最小元素習題為例:

給定有 n

n 個數的 a

a 序列:a_1,a_2,a_3\cdots a_na​

1​​,

a​2​

​,a​

3​​⋯

a​n​

​。對於這個序列,我們想得到乙個子串行 a_, a_ \cdots a_ \cdots a_(1 \le p_1 < p_2<\cdots p_i < \cdots < p_m \le n)a​

p​1​

​​​,

a​p​

2​​​

​⋯a​

p​i​

​​​⋯

a​p​

m​​​

​(1≤

p​1​

​2​​<⋯p

​i​​

<

⋯m​​≤

n),滿足 a_ \ge a_ \ge \cdots \ge a_ \le \cdots \le a_a​

p​1​

​​​≥

a​p​

2​​​

​≥⋯≥

a​p​

i​​​

​≤⋯≤

a​p​

m​​​

​。從 a

a 序列最少刪除多少元素,可以得到我們想要的子串行。

第一行輸入乙個整數 n

n,代表 a

a 序列中數字的個數。第二個輸入 n

n 個整數,代表a_1,a_2,a_3...a_na​

1​​,

a​2​

​,a​

3​​.

..a​

n​​。

(1 \leq n \leq 10001≤

n≤10

00,1 \leq a_i \leq 100001≤

a​i​

​≤10

000)

輸出需要刪除的元素個數,佔一行。

樣例輸入

7

3 2 4 1 2 5 3

樣例輸出

2

啊這道題目思路比較簡單,就是從左往右一次lds最大遞減子串行和從中間到末端lcs最大遞增子串行,2次dp。思路比較簡單,但寫了好久都沒寫對,一直不知道問題出在**。然後總結了下這類dp問題有思路但結果錯誤情況下的debug通法,直接在迴圈裡面加上輸出dp矩陣的語句,然後逐行檢查,一般都能找到**寫錯了。另外最好在草稿紙上先把狀態方程寫下來,我習慣不太好有時候圖省事總是直接寫**,這樣錯誤率也比較高。

下面附上這題**:

#includeusing namespace std;

int dp[1003][1003];

int dp1[1003][1003];

int dp2[1003][1003];

int a[1003];

int main(void)

for(int i=0;i=a[i])

}//cout<

Jsp各種情況下的亂碼問題

jsp各種情況下的亂碼問題 在應用jsp時,即使設定了workspace的字元編碼為utf 8仍然會出現各種亂碼問題。為防止遺忘,現做如下總結 1.contenttype中的charset設定 contenttype的charset是指伺服器發給客戶端的內容編碼,其取值表示頁面的型別和頁面使用的字元...

各種情況下的分割面問題

1 n條直線最多分平面問題 題目大致如 n條直線,最多可以把平面分為多少個區域。析 可能你以前就見過這題目,這充其量是一道初中的思考題。但乙個型別的題目還是從簡單的入手,才容易發現規律。當有n 1條直線時,平面最多被分成了f n 1 個區域。則第n條直線要是切成的區域數最多,就必須與每條直線相交且不...

阿里雲SLB情況下訪問檔案問題

背景 有兩台ecs伺服器都部署了相同的站點,訪問時通過slb進行分發。問題 假如第一次通過slb訪問時分發到了後端的ecs1伺服器,上傳的檔案也放在了ecs1伺服器上。第二次再次通過slb訪問時恰好分發到了ecs2伺服器,這時候就訪問不到上次上傳的檔案了。備註 檔案的訪問方式如下 解決方案 1 實時...