藍橋杯演算法練習筆記 12 動態規劃模型

2021-10-03 20:10:39 字數 3510 閱讀 1399

1.最大欄位和

//最大字段(連續)和

#include

#include

using

namespace std;

int n;

int a[

105]

;int ans=0;

voidf1(

) sum=0;

}}voidf2(

)else}}

intmain()

f1();

//普通寫法,o(n2) f2(

);//動態規劃,o(n)

cout<

cin:

6-2 11 -4 13 -5 -2

cout:

20 */

2.最長上公升子串行

//最長上公升"子串行"(不連續)

#include

#include

using

namespace std;

int n,a[

105]

,dp[

105]

;int ans=0;

intmain()

for(

int i=

1;i<=n;i++)}

ans=

max(ans,dp[i]);

} cout<

return0;

}/*cin:

82 1 5 3 6 4 6 3

cout:

4*/

3.最長公共子串行

//最長公共子串行(不連續)---與求最長公共字段問題進行區分

#include

#include

using

namespace std;

string str1,str2;

int dp[

105]

[105];

int ans=0;

intmain()

else}}

cout<

size()

][str2.

size()

]<

return0;

}/*cin:

abcdefgh

acjlfabhh

cout:

4 (a-c-f-h) 不連續的一段

*/

4.編輯距離

//編輯距離 

#include

#include

using

namespace std;

int dp[

105]

[105];

string a,b;

intmain()

for(

int i=

1;i<=lenb;i++

)for

(int i=

1;i<=lena;i++

)else}}

cout<

[lenb]

<

return0;

}/*cin:

abcd

acef

cout:

3*/

5.最大子矩陣和
//最大子矩陣和 

#include

#include

using

namespace std;

long

long num[

401]

[401];

long

long presum[

401]

[401];

intmain()

}if(ans<=0)

else

}for

(int i=

1;i<=n;i++

)else

ans=

max(ans,sum);}

}}}

cout<

return0;

}/*--cin:

3 31 2 3

4 -5 6

7 8 9

--cout:

35*/

6.環形矩陣

//環形矩陣

//對於環的解題思路可以在環的周圍複製乙份,例如對於本例題參考上圖

#include

#include

using

namespace std;

int num[91]

[91];

long

long sum[91]

[91];

intmain()

}}if(ans<=0)

else

}for

(int i=

1;i<=n;i++

)else

if(nowsum+t<=0)

else

if(ans

}}cout<

}return0;

}/*--cin:

3 31 -2 3

-4 5 -6

7 -8 9

--cout:

20*/

7.刪除最少的元素

藍橋杯 演算法訓練 Pyramids 動態規劃

資源限制 時間限制 7.0s 記憶體限制 512.0mb 問題描述 1.所有石塊都必須用上 2.金字塔數要盡可能少 3.所有金字塔兩兩不同 4.金字塔至少包含兩層,即底座為1的金字塔和底座為2的矮金字塔是不允許的 5.滿足以上4點的基礎上,最大的金字塔要盡可能大 大定義為用的石塊數多 6.滿足以上5...

樹形動態規劃練習《藍橋杯 結點選擇》

問題描述 有一棵 n 個節點的樹,樹上每個節點都有乙個正整數權值。如果乙個點被選擇了,那麼在樹上和它相鄰的點都不能被選擇。求選出的點的權值和最大是多少?輸入格式 第一行包含乙個整數 n 接下來的一行包含 n 個正整數,第 i 個正整數代表點 i 的權值。接下來一共 n 1 行,每行描述樹上的一條邊。...

藍橋杯 演算法訓練 K好數 (動態規劃)

演算法訓練 k好數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 如果乙個自然數n的k進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是k好數。求l位k進製數中k好數的數目。例如k 4,l 2的時候,所有k好數為11 13 20 22 30 31 33 共7個。由於這個數目...