public class Solution {
/**
* @param values: an array of integers
* @return: a boolean which equals to true if the first player will win
*/
public boolean firstWillWin(int[] values) {
// write your code here
int n=values.length;
if(n<=2)
return true;
int max=0;
int twomax=0;
//贪心
boolean turn =true;
for(int i=0;i<n;i++){
if(turn==true){
max+= values[i];
if(i+1<n && values[i+1]>=values[i])
max+=values[++i];
}else{
twomax+=values[i];
if(i+1<n && values[i+1]>=values[i])
twomax+=values[++i];
}
turn =!turn;
}
if(max>twomax)
return true;
else
return false;
}
}
题目提示用动态规划,半天想不出来,其实用贪心完全可以。
两个人取的时候,决定是否取两个数的策略是看第二个数是否比第一个数大。计算两个人的最大值进行比较即可。
代码如下: