dp--최장 상승 하위 시퀀스
1759:최장 상승자 서열
총 시간 제한:
2000ms
메모리 제한:
65536kB
묘사
한 수의 서열
저당
b1 b2 < ... bS에서 우리는 이 서열이 상승했다고 말했다.주어진 시퀀스에 대해(
a1,
a2, ...,
aN), 우리는 상승하는 하위 서열을 얻을 수 있다(
ai1,
ai2, ...,
aiK), 여기 1 <=
i1 i2 < ... iK <= N.예를 들어 서열(1,7,3,5,9,4,8)에 대해 그것의 일부 상승자 서열이 있다. 예를 들어 (1,7),(3,4,8) 등이다.이 서열들 중 가장 긴 길이는 4이다. 예를 들어 서열(1,3,5,8)이다.
당신의 임무는 주어진 서열에 대해 가장 긴 상승자 서열의 길이를 구하는 것입니다.
입력
입력한 첫 번째 행은 시퀀스의 길이 N(1 <= N <= 1000)입니다.두 번째 행에서는 0~10000의 범위에 해당하는 시퀀스의 N개의 정수를 제공합니다.
출력
최장 상승 서열의 길이.
dp[i]는 i를 끝으로 형성된 최장 상승 서열을 나타낸다
매번 [i]>a[j]일 때, 즉 j는 a의 뒤에 놓을 수 있다는 것을 설명한다.
dp[i] = max(dp[j]+1,dp[i])
1 for (int i = 1;i <= n;i++)
2 for (int j = 1;j <= i-1;j++)
3 {
4 if (a[j]<a[i])
5 dp[i] = max(dp[j]+1,dp[i]);
6 }
전체 코드:
1 #include
2 #include
3 using namespace std;
4 int dp[1010];
5 int main()
6 {
7 int n;
8 int a[1010];
9 scanf ("%d",&n);
10 int dp[1010];
11 for (int i = 1;i <= n;i++)
12 {
13 scanf ("%d",&a[i]);
14 dp[i] = 1;
15 }
16 for (int i = 1;i <= n;i++)
17 for (int j = 1;j <= i-1;j++)
18 {
19 if (a[j]<a[i])
20 dp[i] = max(dp[j]+1,dp[i]);
21 }
22 int ans=0;
23 for (int i =1 ;i <= n;i++)
24 ans=max(dp[i],ans);
25 cout<<ans;
26 return 0;
27 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.