现在的位置: 首页 > 综合 > 正文

nyoj 174Max Sequence&poj 2593(dp)

2018年04月25日 ⁄ 综合 ⁄ 共 778字 ⁄ 字号 评论关闭

考察点:动态规划

  思路:虽然题目给出了3000ms的时间,但考虑到数据量可以达到100000,如果用O(N^2)的算法的话,还是极有可能会超时的,于是决定采用这种O(N)时间效率的动规。在输入的同时,进行一次DP,计算出从左到右的最大值,并把它保存在数组dp的对应的下标元素中,这样之后,对于下标为i 的元素,它其中保存的便是前面所有元素可能的最大连续和。再从右到左进行一次DP,计算从右到左的最大连续和。假设此时已经算到下标为i的元素,那么将 sum+dp[i-1]与ans进行比较,将ans取较大者。

import java.util.Scanner;
public class Main {
	
	public static void main(String[] args) {
	  Scanner scanner=new Scanner(System.in);
	  while(scanner.hasNext())
	  {
		 int number=scanner.nextInt();
		 if(number==0)break;
		 int result[]=new int[number];
		 int dp[]=new int[number];
		 int max=-999,sum1=0;
		 for(int i=0;i<number;i++)
		 {
			 result[i]=scanner.nextInt();
			 sum1+=result[i];
			 if(sum1>max)
				 max=sum1;
			 dp[i]=max;
			 if(sum1<0)
				 sum1=0;
		 }
		 
		 int sum2=0,answer=-999;
		 for(int i=number-1;i>0;i--)
		 {
			 sum2+=result[i];
			 if(dp[i-1]+sum2>answer)
				 answer=dp[i-1]+sum2;
			 if(sum2<0)
				 sum2=0;
		 }
		 System.out.println(answer);
	  }
	}
}
                        

抱歉!评论已关闭.