题意 :![]()
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100010],dp[100010],dpp[100010];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
ll k,sum=0;
dp[0]=0;dpp[0]=0;
for(int i=1;i<n;i++){
if(i%2==0)
k=-abs(a[i]-a[i-1]);
else
k=abs(a[i]-a[i-1]);
dp[i]=max(dp[i-1]+k,k);
// cout<<dp[i]<<endl;
sum=max(sum,dp[i]);
// cout<<k<<endl;
}
cout<<endl;
for(int i=2;i<n;i++){
if(i%2!=0)
k=-abs(a[i]-a[i-1]);
else
k=abs(a[i]-a[i-1]);
dpp[i]=max(dpp[i-1]+k,k);
// cout<<k<<endl;
// cout<<dpp[i]<<endl;
sum=max(sum,dpp[i]);
}
// cout<<dp[n-1]<<dpp[n-1]<<endl;
cout<<sum<<endl;
}
本文通过使用C++实现动态规划算法,解决了一类特定的序列问题。算法通过对序列元素进行处理,利用动态规划的思想,计算出序列中最大值。代码中详细展示了如何初始化数组、如何迭代计算以及最终结果的输出。

被折叠的 条评论
为什么被折叠?



