Max Sum 杭电 1003

又是凌晨两三点,这也许就是程序员的诟病。当看到这道题的时候,脑袋里面出现的就是,动态规划,大家不要笑我。我也是个菜鸟,毕竟大家都是在不断地学习中。

题目的意思是给你一个数列,找到一个子数列,这个子数列的和是所有子数列中和最大的。

当然把数列的所有数都列出来肯定不现实。

黑黑,不知道正不正确,我是先从第一个数开始依次加到最后一个数,并且把每一次加的和存到对应的一个和数组中。这样得到了一个不间断的和的数列,但是这样显然还是不行,在加的时候你还得判断一下,当和小于零的时候,就得把起始位置,向后挪一个了。这样才能保证,每次求得的子序列的和是所有子序列当中和最小的。

懂不懂先不说,附上代码:

import java.math.BigDecimal;
import java.util.Scanner;
import java.util.Stack;

public class Main{

	public static void main(String []args){

		Scanner cin=new Scanner(System.in);

		int t=cin.nextInt();
		int [] num=new int[100000];
		int [] sum=new int[100000];

		for (int i=1; i<=t; i++){	

			int n=cin.nextInt(); 

			for (int j=0; j<n; j++){
				num[j]=cin.nextInt();
			}

			int su=0;
			int start=0;
			int end=0;

			for (int j=0; j<n; j++){
				sum[j]=0;
			}

			for (int j=0; j<n; j++){
				su+=num[j];
				sum[j]+=su;

				if (su<0) su=0;
			}

			for (int j=1; j<n; j++){
				if (sum[end]<sum[j]) end=j;
			}

			start=end;
			while (start>0&&sum[start-1]>=0){
				start--;
			}

			start++;
			end++;

			System.out.println("Case "+i+":");
			System.out.println(sum[end-1]+" "+start+" "+end);
			if (i<t) System.out.println();
		}
	}
}
时间: 2024-10-02 20:17:01

Max Sum 杭电 1003的相关文章

杭电1003

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 #include <stdio.h> #include <string.h> #include <math.h> #define MAX 21 int a[MAX]; char c[MAX*2]; int main() { int n,i,j,k,index; int sum,x,y,maxNum,isnegative; int isfirst; int isfirb

ACM杭电1001 Sum Problem 为什么会报错Compilation Error

问题描述 importjava.util.Scanner;publicclassSumProblem{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);while(sc.hasNext()){intsum=0;inti=sc.nextInt();for(intj=1;j<=i;j++){sum+=j;}System.out.println(sum);}}} 解决方案 解决方案二:运行没问题呀解决方案三:你是说在本

HDOJ 1003 Max Sum

Problem Description Given a sequence a[1],a[2],a[3]--a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14. Input The first line of the input contains an

杭电ACM 2000-&amp;gt;2099 100道题 详细解题报告出炉

我去年暑假花了5天,把杭电ACM网站上2000到2099这100道题全AC了,又花了10来天精心写解题报告.里面包括题目.解题思路.编程技巧以及参考源码.所有代码都是使用C/C++写的. 最近整理资料时无意间发现,打包成chm文件和大家分享.我已经上传到CSDN上了.下载地址:http://download.csdn.net/source/492194 也可到我的Google Sites上下载. 题号 题名 题号 题名 2000 ASCII码排序 2001 计算两点间的距离 2002 计算球体积

acm-求问杭电ACM2010水仙花数,我的这个答案为什么是错的

问题描述 求问杭电ACM2010水仙花数,我的这个答案为什么是错的 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int m=0; int n=0; while(in.hasNext()){ m=in.nextInt(); n=in.nextInt(); if(m<n){ narcissus(m,

杭电 1272 poj 1308 小希的迷宫

这道题是我学了并查集过后做的第三个题,教我们的学姐说这是并查集的基础题,所以有必要牢牢掌握. 下面就我做这道题的经验,给大家一些建议吧!当然,我的建议不是最好的,还请各位大神指出我的错误来,我也好改正. 1.题目概览 这道题是杭电1272,POJ 1308如果写好了代码可以试一试. 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s

杭电1002

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1002 #include <stdio.h> #include <string.h> #define MAX 1010 char a[MAX],b[MAX]; int main() { int n,i,j,length,jinwei=0; int flag; char temp; scanf("%d",&n); for(i=0;i<n;i++) { i

c语言-杭电oj 2014题 代码不对 不知道哪里错了

问题描述 杭电oj 2014题 代码不对 不知道哪里错了 偶数求和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 65195 Accepted Submission(s): 27929 Problem Description 有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,

代码-杭电ACM1096,一直有错误,求帮忙

问题描述 杭电ACM1096,一直有错误,求帮忙 我的代码 #include int main(){ int n, i; int a, b; int x, sum; while(scanf("%d", &n) != EOF){ for (i = 0; i < n; i++){ scanf("%d", &a); for (b = 0; b < a; b++){ sum = 0; scanf("%d", &x);