樣本收集問題JAVA實現

2021-08-07 10:00:08 字數 1431 閱讀 9021

機械人rob 從方形區域f 的左上角a點出發,

向下或向右行走

,直到右下角的b 點,在走過的路上,收集方格中的樣本。rob 從a點到b 點共走2次,試找出rob 的2條行走路徑,使其取得的樣本總價值最大。 

input:

第1 行有1 個正整數n,表示方形區域f有n*n 個方格。接下來每行有3 個整數,前2 個表示方格位置,第3個數為該位置樣本價值。最後一行是3個0。

output:

將計算的最大樣本總價值輸出。

sample input

82 3 13

2 6 6

3 5 7

4 4 14

5 2 21

5 6 4

6 3 15

7 2 14

0 0 0

sample output

67

由於機械人只能向下走或向右走

,故機械人到座標(i,j)時所採集到的樣本價值只依賴於機械人上一步的選擇,即依賴於到(i-1,j)或者(i,j-1)時採集的樣本總價值。 

綜上所述,此題我採用動態規劃的方法解題。

1)子問題劃分

設m[i,j]為機械人從座標(1,1)出發到座標(i,j)停下時所採集到的樣本總價值

2)遞推方程

初值:m[1,i] = m[1,i]+field[1,i]   //i=1,2,...,n field是記錄方形區域f中樣本位置與價值的二維矩陣

m[i,1] = m[i,1]+field[i,1]

遞推式:m[i,j] = max + field[i,j]

【注】此題由於要採集兩次,故要呼叫兩次動歸方法,在第一次呼叫前還應該設計好乙個二維陣列記錄樣本採集的最大價值的路徑,而在第一次呼叫完畢後根據記錄的路徑去將該路徑上的樣本價值標為0

static int n,

field;

static string s;

static int collectsample()

s[1][1] = "0,0";

for(int i=2;i<=n;i++)else

}}

return m[n][n]; }

static void trace(int i,int j)

public static void main(string args) throws exception

int first = collectsample();

trace(n,n);//執行標記函式,除去採集過的樣本

s = new string[n+1][n+1]; //s重新初始化

int second = first + collectsample();

system.out.println(second);

}

樣本收集問題

機械人rob在乙個有n n 個方格的方形區域f 中收集樣本。i,j 方格中樣本的價值為v i,j 如下圖所示 rob 從方形區域f 的左上角a點出發,向下或向右行走,直到右下角的b 點,在走過的路上,收集方格中的樣本。rob 從a點到b 點共走2次,試找出rob 的2條行走路徑,使其取得的樣本總價值...

收集樣本問題(num)

演算法 dp 分析 跟傳紙條是乙個題,只不過本題算上了起點和終點,即從起點出發也要算上起點,因此在最後再加上起點和終點位置上的值即可。program num const maxn 9 var n longint a array 0.maxn,0.maxn of longint f array 0.m...

java問題收集

所有位元組碼都是用sun虛擬機器編譯的.以下內容都是在網上查閱,加上一些自己的分析,如果有不對之處請大家指出來.1,迴圈外內定義變數 和 迴圈內定義變數 下面是 和位元組碼,通過比較可以知道,兩種方法位元組碼基本上是相同的.兩者效能基本上相等.在實際使用時建議根據語義來決定,不需要在迴圈外部使用的就...