题目
传送门
输入 3 3 0 1 3 2 2 0 1 2 7 0 1 2 5 4 3 6 7 输出 3 2 9
题意:t组测试样例,下面两个数n,m;在下面是n个数,从中按顺序选不超过n个数满足这几个数的先加后减运算值最大.
思路:我们肯定要加上最大的减去最小的,即为加上一段上升序列中最大值,下降序列中最小值,最后一步操作一定应该为加法,这样保证.值最大
AC code
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<sstream>
#include<stack>
#include<queue>
using namespace std
;
#define ll long long
ll n
,t
,m
,a
[360000];
void solve()
{ ll i
,s
=0,ans
=0;
for( i
=0;i
<n
;i
++)
cin
>>a
[i
];
i
=1;
while(i
<n
)
{
for( ;i
<n
;i
++)
if(a
[i
]-a
[i
-1]<0)
break;
ans
+=a
[i
-1];
if(i
==n
)break;
for(;i
<n
;i
++)
if(a
[i
]-a
[i
-1]>0)break;
if(i
==n
)break;
ans
-=a
[i
-1];
}
printf("%lld\n",max(ans
,a
[0]));
}
int main()
{
ios
::sync_with_stdio(0);
cin
>>t
;
while(t
--)
{
cin
>>n
>>m
;
solve();}
}