hdu 5805 简单思维题

来源:互联网 发布:mysql 网易镜像 编辑:程序博客网 时间:2024/05/08 10:35

点击打开链接

#include <iostream>#include <algorithm>#include <cstdio> #include <cstdlib>#include <cmath> #include <cstring>using namespace std;const int M =101000;long n;long long a[M],f[M],g[M]; // f[i] 1~i中相邻差的最大值  g[i] i~n中相邻差最大值 int main()          // 删除i后 数列相邻差最大值为 ans=max(abs(a[i-1]-a[i+1],f[i-1],g[i+1]) {    int t;    cin>>t;    while(t--)    {        cin>>n;            memset(f,0,sizeof(f));         for(int i=1;i<=n;i++)        {            scanf("%lld",&a[i]);            if(i>=2)            f[i]=max(abs(a[i]-a[i-1]),f[i-1]);        }            memset(g,0,sizeof(g)); //        for(int i=n-1;i>=1;i--)        {                        g[i]=max(g[i+1],abs(a[i]-a[i+1]));        }                long long ans=0;        for(int i=1;i<=n;i++)        {        if(i==1)        ans+=g[2]; //删掉1         else if(i==n)ans+=f[n-1];//删掉n           else{long long k1=max(f[i-1],g[i+1]);            long long k2=abs(a[i-1]-a[i+1]);                    ans+=max(k1,k2);            }}              cout<<ans<<endl;      }     return 0;}


0 0
原创粉丝点击