第一行輸入乙個整數n (1 ≤ n ≤ 40)
第二行輸入n個整數
示例1輸出乙個整數
2
3 -1
示例24
5 3 -1
示例32
3
-1 0 40
示例40
11
-1 40 -1 -1 -1 10 -1 -1 -1 21 -1
579347890
子任務1: n <= 10
子任務2: n <= 20
子任務3: 無限制
解題思路:
按照動態規劃的一般步驟 , 假如 有個序列 ***** 5 我們需要知道 當前數與前乙個數的大小關係
ac**:
#include#include#define mod 1000000007
using namespace std;
int main()
else dp[1][a[1]][1][a[1]]=1;
for(int i=2;i<=n;i++)else dp[i][j][2][k+j]=(dp[i][j][2][k+j]+dp[i-1][l][1][k])%mod; }}
}}elseelse dp[i][a[i]][2][k+a[i]]=(dp[i][a[i]][2][k+a[i]]+dp[i-1][l][1][k])%mod;}}
}}
long long sum=0;
for(int j=0;j<=40;j++)
}cout
}
最長子序列 動態規劃
最長子序列可以說是剛接觸動態規劃的人經常遇見也不得不解決的問題,最常見的有兩種,一種是最長公共子串行 lcs 還有乙個是最長上公升子串行 lis 今天我就總結下這兩個的做法。一 最長公共子串行 lcs 題目描述 給你兩個陣列,可以是數字的,也可以是字串,我們假設是數字的!舉個例子 x 1,5,6,4...
最長子序列 動態規劃
一.題目描述 在字母表上分別給出兩個長度為m和n的字串x和y,確定在x和y中的最長公共子串行。例如,x為 abcbdab y為 bdcaba 則兩者的最長公共子串行為bdab。二.思路分析 假設兩個字串為x1,x2 xi和y1,y2 yj,再令l i,j 表示這兩個的最長公共子串行。思路如下 如果x...
376 擺動序列(動態規劃)
如果連續數字之間的差嚴格地在正數和負數之間交替,則數字序列稱為擺動序列。第乙個差 如果存在的話 可能是正數或負數。少於兩個元素的序列也是擺動序列。例如,1,7,4,9,2,5 是乙個擺動序列,因為差值 6,3,5,7,3 是正負交替出現的。相反,1,4,7,2,5 和 1,7,4,5,5 不是擺動序...