877. 石子游戲
阿新 • • 發佈:2021-01-07
class Solution { public boolean stoneGame(int[] piles) { int n=piles.length; int [][]dp=new int[n][n]; //初始化dp[i][i] for(int i=0;i<n;i++) dp[i][i]=piles[i]; /**注意這裡的兩個迴圈第一個迴圈dis代表間隔距離,比如說dis=1時,配合接下來i的迴圈,會不斷得到相鄰2個石頭堆的最優選擇策略,比如說{1,2,3,4}時,會得到{1,2}、{2、3}、{3、4}的最優選擇策略;當dis=2時,會得到相鄰3個石頭堆的最優選擇策略,得到{1,2,3}、{2、3、4}。**/ for(int dis=1;dis<n;dis++) for(int i=0;i<n-dis;i++)//i仍然表示起始位置 dp[i][i+dis]=Math.max(piles[i]-dp[i+1][i+dis],piles[i+dis]-dp[i][i+dis-1]); return dp[0][n-1]>0; } }