給定一組數(shù)列:a1,a2,...an;
求該數(shù)列的最長的遞增長度?
解法:動(dòng)態(tài)規(guī)劃
狀態(tài)轉(zhuǎn)移方程:dp[i]=max(dp[i],dp[j]+1)
code:
int dp[maxn],a[maxn],m;
cin>>n;
dp[1]=1;
for(int i=1;i<=n;++i)
{
cin>>a[i];
for(int j=i-1;j>0;--j)
{
if(a[j]<a[i]) {dp[i]=max(dp[i],dp[j]+1);}
}
if(dp[i]==0) dp[i]=1;
m=max(m,dp[i]);
}
解釋狀態(tài)轉(zhuǎn)移方程:
1.順序問題:有兩個(gè)順序:
一捡鱼、輸入數(shù)列的順序暴构,1~n
二茄茁、遞推的順序:n1(也可以是1n,這不影響侥猩,因?yàn)槲覀兊倪f推每次都取最大值)