杭电ACM1003 求最大子序列和问题

来源:互联网 发布:列主元高斯消去法编程 编辑:程序博客网 时间:2024/04/30 03:42

刚接触ACM,试着用java去写,到了1003好不容易写好个,提交说超时,我用的是暴力求解啊!!!超时就成必须的,最大子序列求和要用到动态规划的思想,以后做题之前一定要好好想想有没有更好的解决办法

暴力方法:

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int caseNum = scanner.nextInt();scanner.nextLine();int[][] input = new int[caseNum][];for (int i = 0; i < caseNum; i++) {int length = scanner.nextInt();input[i] = new int[length];for (int j = 0; j < length; j++) {input[i][j] = scanner.nextInt();}scanner.nextLine();}for (int i = 0; i < caseNum; i++) {System.out.println("Case " + (i + 1) + ":");outputCase(input[i]);System.out.println();}}public static void outputCase(int[] a) {int sum = a[0];int start = 0;int end = 0;for (int i = 0; i < a.length; i++) {for (int j = 0; i + j < a.length; j++) {int tempSum = 0;for (int k = 0; k <= j; k++) {tempSum += a[i + k];}if (tempSum > sum) {sum = tempSum;start = i + 1;end = i + j + 1;}}}System.out.println(sum + " " + start + " " + end);}}


下面链接的文章对这个问题说的很详细

点击打开链接

原创粉丝点击