陣列輪流取頭或尾的最大值

2021-08-28 03:53:26 字數 1033 閱讀 5469

方法一:遞迴

遞推關係為:

m(left,right) = max(v[left] + l(left + 1,right) , v[right] + l(left, right - 1))

其中l(left,right) = sum(left, right) - m(left, right)

其中m表示自己先選獲得的最大值,l表示對方先選自己獲得的最大值

package lianxi_1;

//有乙個陣列,a,b輪流取數字,每次只能從頭或尾取,問先取的人最多取多少?

//暫時基於遞迴實現,動態規劃遞推式是有了,不過遞推式中依賴更高index的項,不知咋辦了。。

public class exercise14

return act(a, sum, 0, a.length - 1);

} private static int act(int a, int sum, int l, int r) else

} public static void main(string args) ;

int n = max(v, 0, v.length - 1);

system.out.println(n);

}}

方法二:動態規劃

遞推關係為:

dp[i][j]=sum[i][j]-min(dp[i+1][j],dp[i][j-1])
dp[i][j]表示i到j獲得的最大值,sum[i][j]表示i到j的總和

public static void main(string args) 

for(int i=n;i>0;i--)

}int first=dp[1][n];

int second=sum[n]-first;

system.out.println(first+" "+second);

}

陣列取最大值最小值

1 陣列取出最大值,最小值的方式 第一種 遍歷一邊陣列就可以找出需要的值,基本上可以說是速度最快的演算法,還不需要排序 int intarray int max intarray 0 int min intarray 0 for int i intarray listl arrays.aslist ...

C 求陣列最大值或最大值位置索引

常見求最大值,是數值型陣列,這個通常遍歷陣列方式,或陣列排序即可完成。但對於字串或日期等非數值型別不能處理。下面給出泛型陣列的最大值或最大值位置索引的自定義函式。陣列最大值的位置索引 傳入乙個陣列,求出乙個陣列的最大值的位置 public static int maxindex t arr wher...

C 陣列或vector最大值最小值

要注意該類函式作用範圍是兩引數左閉右開區間 include 用min和max函式 1 對於普通陣列 int arr len int min min arr,arr len 2 對於動態陣列vector vectorarr int min min arr.begin arr.end 用min elem...