動態規劃
一維dp[i]表示以i結尾的子陣列的最大和
以下**可以記錄子陣列的開始和結束位置
//要求輸出子串行和的第乙個和最後乙個
#include
#include
//兩個輔助陣列
const
int maxn=
1000
;int dp[maxn]
;int pre[maxn]
;//存放子串行的開始
int arr[maxn]
;using
namespace std;
intmaxsubarray
(int arr,
int n,
int&flag)
else
if(dp[i]
>res)
}return res;
}int
main()
for(
int i=
0;i)int flag=0;
cout<<
maxsubarray
(arr,n,flag)
<<
" ";
cout<
]<<
" "<
<
/* for (int i = 0; i < n;i++)*/
}return0;
}
二維 最大子矩陣
要學會降維!
一開始沒想到,參考了別人的**
#include
#include
using
namespace std;
intmaxsub
(int a,
int n)
return max;
}int
main()
} cout<
}}
最長公共連續子串和最長連續公共子串行
用二維陣列c i j 記錄串x1 x2 x i x1x2 xi與y 1y 2 y j y1y2 yj 的lcs長度,則可得到狀態轉移方程c i,j 0c i 1 j 1 1max c i,j 1 c i 1,j i 0 orj 0i,j 0a ndxi y j i,j 0a ndxi y j pub...
最長連續子串行變種
在蒜廠年會上有乙個 在乙個環形的桌子上,有 n 個紙團,每個紙團上寫乙個數字,表示你可以獲得多少蒜幣。但是這個遊戲比較坑,裡面竟然有負數,表示你要支付多少蒜幣。因為這些數字都是可見的,所以大家都是不會出現的賠的情況。遊戲規則 每人只能抓一次,只能抓取一段連續的紙團,所有紙團上的數字和就是你可以獲得的...
求最長連續公共子串行和最長連續子字串
問題的關鍵是如何定義子問題。假設有 xm x1 x2 x3 xm yn y1 y2 y3 yn 1.最長公共子串行 不必連續 定義f m,n 為xm和yn之間最長的子串行的長度 於是有f m,0 f 0,m 0 如果xm yn,則f m,n max 如果xm yn,則f m,n f m 1,n 1 ...