数组题目小计(3)

今天习得了一个比动态规划更容易看懂的算法:从数组的第一个元素开始累加至最后一个元素,第一个大于0的和赋予最大值,求得的大于0的和都与最大值进行比较,将较大的和赋予最大值,如果和小于0,则将和置为0,不影响后面数相加

 

代码:

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     cout << "请输入数组元素个数:";
 6     int num;
 7     cin >> num;
 8     cout << "请输入数组:";
 9     int i,array_[100];
10     for (i = 0; i < num; i++)
11     {
12         cin >> array_[i];
13     }
14     int sum=0,max=array_[0];
15     for (i = 0; i < num; i++)//最大值大于0
16     {
17         sum = sum + array_[i];
18         if (sum > max)
19             max = sum;
20         if (sum < 0)
21             sum = 0;
22     }
23     for (i = 0; i < num; i++)
24     {
25         if (max == 0)//最大值小于等于0
26         {
27             sum = sum + array_[i];
28             if (sum > max)
29                 max = sum;
30         }
31     }
32     cout << max;
33     return 0;
34 }

 

测试结果:

心得体会:

开心又担心,终于找到好方法解决问题了,但是速度实在是慢,要达到自己想达到的高度还需要很长一段路,要注意临界条件和正负值

posted @ 2016-03-24 18:15  四季信风  阅读(224)  评论(1编辑  收藏  举报