解法一:贪心

注意考虑全是负数和0的特殊情况。

  1. import java.io.*;
  2. public class Main {
  3. public static void main(String[] args) throws IOException {
  4. StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
  5. PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
  6. in.nextToken();
  7. int N = (int) in.nval;
  8. int[] nums = new int[N];
  9. int max = -1, sum = 0;
  10. int first = 0, last = N - 1, temp = 0;
  11. for (int i = 0; i < N; ++i) {
  12. in.nextToken();
  13. nums[i] = (int) in.nval;
  14. sum += nums[i];
  15. if (sum < 0) {
  16. sum = 0;
  17. temp = i + 1;
  18. } else if (sum > max) {
  19. max = sum;
  20. first = temp;
  21. last = i;
  22. }
  23. }
  24. if (max < 0) {
  25. max = 0;
  26. }
  27. out.println(max + " " + nums[first] + " " + nums[last]);
  28. out.flush();
  29. }
  30. }