文章

5

粉丝

244

获赞

5

访问

6.1k

头像
ZIG-ZAG 题解:动态规划
P1624 上海交通大学2017年机试题
发布于2023年5月9日 11:01
阅读数 722

因为有上下上和下上下两种情况,所以动态规划dp数组开二维

dp[i][0] 代表a[i]在序列当中是由序列的前一个数上升来的

dp[i][1] 代表a[i]在序列当中是由序列的前一个数下降来的

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<string.h>
#include<queue>
#include<math.h>
#include<bits/stdc++.h>
using namespace std;
const int maxv=4010;

int main() {
	int n;
	while(cin>>n)
	{
		int a[n+5];
		for(int i=0;i<n;i++)
		{
			cin>>a[i];
		}
		int dp[n+1][2];
		memset(dp,0,sizeof(dp));
		int ans=1;
		dp[0][0]=1;// 代表是上升
		dp[0][1]=1;
		for(int i=1;i<n;i++)
		{
			for(int j=0;j<i;j++)
			{
				if(a[i]>a[j])
				{
					dp[i][0]=max(dp[i][0],dp[j][1]+1);
				}
				else if(a[i]<a[j])
				{
					dp[i][1]=max(dp[i][1],dp[j][0]+1);
				}
			}
			ans=max(ans,max(dp[i][0],dp[i][1]));
			
		}
		cout<<ans<<endl;
	}
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发