第一次写博客,我的处女作就献给了hdu1003了了了

本文详细解析了HDU1003题目的解题思路及实现方法,采用C++代码实现,重点在于区分并同步更新最大序列和与用于判断的临时变量,确保每次更新都考虑到了最佳的子数组区间。
http://acm.hdu.edu.cn/showproblem.php?pid=1003

第一次写博客呀。。好激动,什么都不会,写的不好请吐槽。谢谢。

hdu1003,本来还以为是水题,没想到他喵的困了我那么久啊,不能忍啊……

其实只要注意将当前记忆的最大序列和mmax与临时用来判断要不要换掉mmax的sum区分开来就好,另外一点就是mmax是与sum同步更新的,就是说每一次sum变化都要判断一下要不要把mmax给换了。额,别忘了初始化。

 1   #include <iostream>
 2  #include <cstdio>
 3  using namespace std;
 4 
 5  int main()
 6  {
 7      int t, n;
 8      int doubee;
 9      cin >> t;
10      for(int cas = 1; cas <= t; cas++)
11      {
12          int mmax = -1111, left = 0, right = 0;
13          int sum = -1111, tmpl = 0, tmpr = 0;
14          cin >> n;
15          for(int i = 0; i < n; i++)
16          {
17              cin >> doubee;
18              if(sum < 0)    //避免mmax加上了负数,这种累赘一定要及时甩掉
19                 sum = doubee, tmpl = tmpr = i;//更新和的时候即更新下标
20              else
21                 sum += doubee, tmpr = i;
22              if(mmax < sum)//每一次sum的值变化都要考虑要不要把mmax换了
23                 mmax = sum, right = tmpr, left = tmpl;
24          }
25          cout << "Case " << cas << ":" << endl;
26          cout << mmax << " " << left + 1 << " " << right + 1 << endl;
27          if(cas != t)
28             cout << endl;//末尾没有空行别忘了。。
29      }
30      return 0;
31  }

 

转载于:https://www.cnblogs.com/julyed/p/3911146.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值