2020.12.18 19:41
經典例題1.lis(求最長上公升子串行)
題目描述:
給定乙個長度為n的數列,求數值嚴格單調遞增的子串行的長度最長是多少。
輸入格式
第一行包含整數n。
第二行包含n個整數,表示完整序列。
輸出格式
輸出乙個整數,表示最大長度。
資料範圍
1≤n≤1000,
−109≤數列中的數≤109
輸入樣例:
73 1 2 1 8 5 6
輸出樣例:
4
**```cpp
//輸入的時候 a輸出從1到n
int a[100];
int ans; // 最大長度
int k[100]; //存放下標
void bfs(len)
for(int i=k[len]+1;i<=n;i++) }
}a[0]=-0x3f //a[0]足夠小,保證後面的數會比a[0]大
k[0]=0;
dfs(0);
//然後輸出ans即可 `**
dp方法(ac**):
#include
using
namespace std;
int a[
1000];
int dp[
1000];
intmain()
int res=0;
//存最大長度
for(
int i=
1;i<=n;i++)}
res=
max(res,dp[i]);
//更新最大長度
}//dp(i)表示以a[i]為結尾的最長子序列的長度,即最優解
//新狀態:結尾下標
//狀態總數:n
cout
}
輸入格式
第一行包含兩個整數n和m。
第二行包含乙個長度為n的字串,表示字串a。
第三行包含乙個長度為m的字串,表示字串b。
字串均由小寫字母構成。
輸出格式
輸出乙個整數,表示最大長度。
資料範圍
1≤n,m≤1000
輸入樣例:
4 5acbd
abedc
輸出樣例:
3思路:用二維陣列dp[i][j]表示字首子串a[1~i] 與b[1~j]的「最長公共子串行」的長度
ac**
#include
using namespace std;
char a[
1050];
char b[
1050];
int dp[
1050][
1050];
intmain()
}}cout<[m]/最後的就是最大的
return0;
}
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
輸入格式
第一行包含整數n,表示數字三角形的層數。
接下來n行,每行包含若干整數,其中第 i 行表示數字三角形第 i 層包含的整數。
輸出格式
輸出乙個整數,表示最大的路徑數字和。
資料範圍
1≤n≤500,
−10000≤三角形中的整數≤10000
思路:可以從下往上,也可以從上往下。
從上往下的話,要麼走下面,dp[i+1][j],要麼走右下角dp[i+1][j+1]
從上往下:
#include
using namespace std;
int a[
1000][
1000];
int dp[
1000][
1000];
intmain()
}memset
(dp,
-0x3f
,sizeof
(dp));
//好像是因為資料有可能是負數,所以dp初始化為負無窮?? 歡迎指正
dp[1]
[1]=a[1]
[1];
// 一開始寫的時候這裡錯了,要記得給dp[1][1]初始化
for(
int i=
1;i<=n;i++)}
int res=0;
for(
int j=
1;j<=n;j++
)//尋找最大的
cout
}
從下往上:杭電的數塔題目
#include
using
namespace std;
intmain()
}for
(int j=
1;j<=m;j++
)for
(int i=m-
1;i>=
0;i--)}
printf
("%d\n"
,dp[1]
[1])
;}return0;
}
dp好難 orz。。。 線性DP基礎 acwing 動態規劃
注意點 1 其實就是講所有走每一步的時候求大致值就好,然後這個值又會對下面進行影響,就像自己思考問題一樣 2 然後就是需要注意一下邊界問題,因為我們這邊求最大值,所以需要對邊界進行初始化 最長上公升子串行理解 1 有一說一,樣板題,很快就容易,就是當前這個值可以由前面 轉過來然後max最大長度就行,...
AcWing 演算法基礎課 動態規劃
1 揹包問題 1 01揹包 每件物品僅用一次 可以做空間優化 dp j max dp j dp j v i w i 0,1揹包狀態均是從前一迴圈的狀態轉移 2 完全揹包 每件物品可以用無限次 完全揹包的狀態可以從當前迴圈的狀態轉移,進行優化 3 多重揹包 每件物品有不同的數量限制 可以對物品的數量限...
AcWing 327 玉公尺田 狀態壓縮動態規劃)
農夫約翰的土地由 m times n 個小方格組成,現在他要在土地裡種植玉公尺。非常遺憾,部分土地是不育的,無法種植。而且,相鄰的土地不能同時種植玉公尺,也就是說種植玉公尺的所有方格之間都不會有公共邊緣。注意 這裡是上下左右邊緣,不是兩斜對角邊緣 現在給定土地的大小,請你求出共有多少種種植方法。土地...