地上有乙個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...