郁闷!! 这道题其实是一道很水的! 当然是我明白以后才认识到的!
这道题, 其实 所有的要不知道道 奇偶时间 是吃还是不吃的好,所以 开一个三维数组 分别表示 分别表示 奇数偶数吃和不吃! 主要是 判断上一次是吃好还是不吃的好!
还有今天学会 三维数组用法!! 咳 我还有很长一段路要走! 加油!!!
1 1 #include <iostream>
2 2 #include <vector>
3 3 #include <string>
4 4 #include <new>
5 5 #include <algorithm>
6 6 using namespace std;
7 7
8 8 int s1[150001][2][2];
9 9
10 10
11 11 int main()
12 12 {
13 13 int s2[150001];
14 14 int num;
15 15 cin >> num;
16 16 for ( int i = 0; i != num; ++i )
17 17 scanf ( "%d",&s2[i] );
18 18 for ( int i = 1; i <= num; ++i )
19 19 {
20 20 s1[i][0][0] = max( s1[i-1][0][0],s1[i-1][0][1] ); // 偶数时间 没有吃
21 21 s1[i][0][1] = max( s1[i-1][1][0],s1[i-1][1][1] ) - s2[i-1]; // 偶数时间 吃了
22 22 s1[i][1][0] = max( s1[i-1][1][0],s1[i-1][1][1] ); // 奇数时间 不吃
23 23 s1[i][1][1] = max( s1[i-1][0][0],s1[i-1][0][1] ) + s2[i-1];
24 24 }
25 25 cout << max( max( s1[num][0][0],s1[num][0][1] ),max( s1[num][1][0],s1[num][1][1] ) ) << endl;
26 26 }
27 27