今天习得了一个比动态规划更容易看懂的算法:从数组的第一个元素开始累加至最后一个元素,第一个大于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 }
测试结果:
心得体会:
开心又担心,终于找到好方法解决问题了,但是速度实在是慢,要达到自己想达到的高度还需要很长一段路,要注意临界条件和正负值