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個。由於這個數目...