HDU 5280 Senior's Array

本文介绍了一种优化算法,用于在给定的数字序列中修改一个数为指定值,以达到获得最长连续子序列和的最大化目标。通过遍历每个数字并替换为指定值,算法寻找最优解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析:给你n个数字,和一个p,让你改变n个数中的一个数为p,使得最长连续子序列之和最大。因为n不大,<=1000,所以可以暴力求,让每个数字都变换一次然后求最大值。
# include <stdio.h>
  __int64 MAX(int n,int a[1005])
  {
      __int64 i,sum=0,ans=-1e9;
      for(i=0;i<n;i++)
      {
          sum+=a[i];
          if(sum>ans)
            ans=sum;
          if(sum<0)
            sum=0;
      }
      return ans;
  }
  int main()
  {
      int i,n,p,T,t,a[1005];
      __int64 ans,s;
      scanf("%d",&T);
      while(T--)
      {
          scanf("%d%d",&n,&p);
          for(i=0;i<n;i++)
            scanf("%d",&a[i]);
          for(i=0,ans=-1e9;i<n;i++)
          {
              t=a[i];
              a[i]=p;
              s=MAX(n,a);
              ans=s>ans?s:ans;
              a[i]=t;
          }
          printf("%I64d\n",ans);
      }
      return 0;
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值