刷题

刷题_第1张图片
解题思路:玩家取数的时候取的数一定是使最后他的积分最大数,而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));

刷题_第2张图片

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];
}

刷题_第3张图片
思路·:数组中的每一个与它后面数的差值,将最大的下标放入数组中输出

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]);

你可能感兴趣的:(算法)