解题思路:玩家取数的时候取的数一定是使最后他的积分最大数,而BOOS取数取的数一定是使剩下的数让玩家取数积分最小的数。
var n=parseInt(readline());
var arr=[];
for(var i=0;i<n;i++){
arr.push(readline());
}
var sum=0;
//数字总和
for(var k=0;k<arr.length;k++){
sum+=arr[k];
}
var res=0;
//玩家第一次取数,从左边或右边取一个
calSum(0,arr.length-1,false);
function calSum(left,right,isTurn){
if(left>right)
return res;
if(left==right){
if(!isTurn)
return res=arr[left];
else
return res=0;
}
if(!isTurn)
//玩家取数,取一个可以使得总和最大数
return res=Math.max(calSum(left+1,right,!isTurn)+arr[left],calSum(left,right-1,!isTurn)+arr[right]);
else
//BOSS取数,无一个使玩家总和最小的数
return res=Math.min(calSum(left+1,right,!isTurn),calSum(left,right-1,!isTurn));
}
print(res+","+(sum-res));
function minDistance(str1,str2){
var len1=str1.length,len2=srt2.length;
var res=[];
for(var i=0;i<len1;i++) res[i][0]=i;
for(var j=0;j<len2;j++) res[0][j]=j;
for(var m=1;m<len1;m++){
for(var n=1;n<len2;n++){
if(str1.charAt(i)==str2.charAt(j)) res[i][j]=res[i-1][j-1];
else res[i][j]=Math.min(res[i-1][j-1],Math.min(res[i-1][j],res[i][j-1]))+1;
}
}
return res[len1][res2];
}
思路·:数组中的每一个与它后面数的差值,将最大的下标放入数组中输出
var n=parseInt(readline());
var arr=[];
for(var k=0;k<n;k++){
arr.push(readline());
}
var res=arr[1]-arr[0];
var newArr=[[0,1]];
for(var i=0;i<arr.length-1;i++){
for(var j=i+1;j<arr.length;j++){
//如果差值大于当前给定最大的差值
if(arr[j]-arr[i]>res){
res=arr[j]-arr[i];
newArr.pop();
newArr.push([i,j])
}
}
}
print(newArr[0][0]+","+newArr[0][1]);