劍指Offer 六 機械人到達的格仔 剪繩子

2021-09-27 06:32:56 字數 2422 閱讀 9247

地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。

例如,當k為18時,機械人能夠進入方格(35,37),因為3+5+3+7 = 18。但是,它不能進入方格(35,38),因為3+5+3+8 =19。請問該機械人能夠達到多少個格仔?

和矩陣中的路徑一樣,也是通過回溯法來將能到達的位置進行統計,如果能到達,返回 1 .

每次可以將能訪問過的位置的數字進行標記,防止重複判斷.

public

static

void

main

(string[

] args)

public

static

intmovingcount

(int threshold,

int rows,

int cols)

int a[

]=newint

[rows]

[cols]

;return

movingcountnumber

(a,0,0

,rows,cols,threshold);}

public

static

intmovingcountnumber

(int

a,int rownow,

int colnow,

int rows,

int cols,

int threshold)

a[rownow]

[colnow]=1

;return

movingcountnumber

(a,rownow+

1,colnow,rows,cols,threshold)

+movingcountnumber

(a,rownow-

1,colnow,rows,cols,threshold)

+movingcountnumber

(a,rownow,colnow+

1,rows,cols,threshold)

+movingcountnumber

(a,rownow,colnow-

1,rows,cols,threshold)+1

;}public

static

intgetnum

(int n)

return num;

}

給你一根長度為n的繩子,請把繩子剪成m段(m、n都是整數,n>1並且m>1),每段繩子的長度記為k[0],k[1],…,k[m]。請問k[0]xk[1]x…xk[m]可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2、3、3的三段,此時得到的最大乘積是18。

方法1當繩子長分別為1.2.3時,可以簡單的知道所要做出的決策。當大於4時,需要考慮前面每一步的最大值。以4為例,需要知道 f(1)*f(3) 和 f(2)*f(2)的值哪個大。然後將長度為4時能達到的最大乘積存放起來,方便下次使用。

方法2在剪之前需要規劃好怎麼剪,當剩下多少公尺時,怎麼剪。

當長度n>=5 時,盡量剪3公尺的,長度為4時, 剪為2公尺和2公尺的繩子。

這樣剪下來可以達到題目中的要求,即乘積最大。

public

intcutrope

(int target)

if(target ==2)

if(target ==3)

int a=

newint

[target +1]

; a[0]

=0; a[1]

=1; a[2]

=2; a[3]

=3;int max =0;

for(

int i =

4; i <=target; i++

) a[i]

= max;}}

//兩層迴圈

max = a[target]

;return max;

}public

intcutrope1

(int target)

if(target ==2)

if(target ==3)

int threetime = target/3;

target = target-

3*threetime;

if(target==1)

int twotime = target/2;

return

(int

)math.

pow(

3,threetime)*(

int)math.

pow(

2,twotime)

;}

劍指offer 機械人運動範圍

題目 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 1...

劍指offer 機械人的運動範圍

地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 19。請...

劍指offer 機械人的運動範圍

題目描述 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8...