D - Wave
D - Wave
目錄
D - Wave
Input
Output
Sample Input
Sample Output
?AC代碼
Avin is studying series. A series is called "wave" if the following conditions are satisfied:
1) It contains at least two elements;
2) All elements at odd positions are the same;
3) All elements at even positions are the same;
4) Elements at odd positions are NOT the same as the elements at even positions.
You are given a series with length n. Avin asks you to find the longest "wave" subseries. A subseries is a subsequence of a series.
Input
The first line contains two numbers n, c (1 ≤ n ≤ 100, 000, 1 ≤ c ≤ 100). The second line contains n integers whose range is [1, c], which represents the series. It is guaranteed that there is always a "wave" subseries.
Output
Print the length of the longest "wave" subseries.
Sample Input
5 3 1 2 1 3 2Sample Output
41) 它至少包含兩個元素;
2) 奇數(shù)位置的所有元素都相同;
3) 偶數(shù)位置的所有元素都是相同的;
4) 奇數(shù)位置的元素與偶數(shù)位置的元素不同。
?
滿足的子序列包含這兩個條件
首先一開始的思路是模擬,發(fā)現(xiàn)有點(diǎn)困難,如果模擬的話就必須刪去元素,十分復(fù)雜。
看了網(wǎng)上的dp解法,妙不可言
用dp算,dp[2][1]表示以21為循環(huán)節(jié)的個數(shù),以1結(jié)尾;dp[1][2]表示以12為循環(huán)節(jié)的個數(shù)。那么dp[1][2] = dp[2][1]+1;以此類推。
?
?
?AC代碼?
#include <bits/stdc++.h> using namespace std; typedef long long LL; LL dp[105][105],ans=1; int N,C,X; int main() {scanf("%d%d",&N,&C);for(int i=1;i<=N;i++){scanf("%d",&X);for(int j=1;j<=C;j++){dp[X][j]=dp[j][X]+1;if(X!=j)//奇偶位不能相同ans=max(ans,dp[X][j]);}}printf("%lld\n",ans);return 0; }?
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)