Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 两个元素不相邻的最大和序列_Algorithm_Dynamic Programming - Fatal编程技术网

Algorithm 两个元素不相邻的最大和序列

Algorithm 两个元素不相邻的最大和序列,algorithm,dynamic-programming,Algorithm,Dynamic Programming,我的max-sum实现如下,但我需要序列,它给出了我在google和stackoverflow上看到的max-sum,但没有输出序列 public int maxSum(int arr[]) { int excl = 0; int incl = arr[0]; for (int i = 1; i < arr.length; i++) { int temp = incl; incl = Math.max(excl + arr[i],

我的max-sum实现如下,但我需要序列,它给出了我在
google
stackoverflow
上看到的max-sum,但没有输出序列

public int maxSum(int arr[]) {
     int excl = 0;
     int incl = arr[0];
     for (int i = 1; i < arr.length; i++) {
       int temp = incl;
       incl = Math.max(excl + arr[i], incl);
       excl = temp;
     }
     return incl;
}
public int maxSum(int arr[]{
int excl=0;
int incl=arr[0];
对于(int i=1;i
所以32710应该返回(3和10)或者325107应该返回(3,5和7)或者{5,5,10100,10,5}将返回(5100和5)或者{1,20,3}将返回20
我确实想要这个解决方案,但我需要的返回值是包含在max sum中的元素序列,而不是max sum value

您的意思是在这个数组中:[1,3,4,4,7,5,3],计算[1+4+4+5]和[3+2+7+3] 还大一点的

如果您这样做,这就是我的算法:

public int maxSum(int arr[]) {
  int sum1 = 0;
  int sum2 = 0;
  for(int i = 0; i < arr.length; i+=2)
    sum1 += arr[i];
  for(int i = 1; i < arr.length; i+=2)
    sum2 += arr[i];

  return Math.max(sum1, sum2);
}
public int maxSum(int arr[]{
int sum1=0;
int-sum2=0;
对于(int i=0;i
或者这个:

public int maxSum(int arr[]) {
  int sum1 = 0;
  int sum2 = 0;
  for(int i = 0; i < arr.length; i+=2)
    sum1 += arr[i];
    try {sum2 += arr[i + 1];} catch(ArrayIndexOutOfBoundsException e){}
  }
  return Math.max(sum1, sum2);
}
public int maxSum(int arr[]{
int sum1=0;
int-sum2=0;
对于(int i=0;i
看起来类似于最长增加片段问题(自上而下的方法)
您可以返回序列的和,而不是序列的长度。另外,不是跳过一个,而是跳过两个以避免相邻元素。

相邻意味着等于?没有相邻意味着像序列2 5 4 7 8中那样的左侧和右侧元素与数组[2 3 4 4 5]中的5So相邻->2,3,4是这样的序列,对吗?没有2,4,5会是那个序列,因为2+4+5=11和2,4,5不是相邻的。请检查这个,它可能会解决问题。不,这是不正确的答案参见示例我添加了更多示例是的,在这个dp问题中使用了自上而下的方法,但我不需要求和,我要序列维护一个缓存,该缓存保存指向上一个索引的指针和当前的最大和。找到最大和后,可以进行回溯以查找其序列。