樣本收集問題

2021-06-12 09:56:35 字數 1793 閱讀 5769

**:

機械人rob在乙個有n*n 個方格的方形區域f 中收集樣本。(i,j)方格中樣本的價值為v(i,j),如下圖所示 

rob 從方形區域f 的左上角a點出發,向下或向右行走,直到右下角的b 點,在走過的路上,收集方格中的樣本。rob 從a點到b 點共走2次,試找出rob 的2條行走路徑,使其取得的樣本總價值最大。給定方形區域f 中的樣本分佈,程式設計計算rob 的2條行走路徑,使其取得的樣本總價值最大。由檔案input.txt給出輸入資料。第1 行有1 個正整數n,表示方形區域f有n*n 個方格。接下來每行有3 個整數,前2 個表示方格位置,第3個數為該位置樣本價值。最後一行是3個0。

由於機械人只能往右走或向下走,所以如果每個位置走過後,它左邊或上邊的點就不需要考慮了。每個機械人到達終點時都經過2*n-2步。可以設h[x1][y1][x2][y2] 表示第乙個機械人到達(x1,y1)第二個機械人走到(x2,y2)時的最優值。如果現在為第s步,如果某個機器的x座標被確定,那麼它的y座標也可以推出來(有x+y = s)。於是我們可以有在第由第s步的最大值去更新s+1步的最大值即可。

而在s步時,可以根據所在的兩個位置選擇乙個方向進行推導(共四個,每個機械人往下或往右)。更新時需要注意如果兩個機械人走到同乙個格仔時,它的值只更新一次(每個樣本只能收集一次)。

現在只剩下乙個難點:為什麼這樣遞推是正確的? 

我們使用的是第s步推導第s+1步,我們知道在第s步時,它左邊,上邊的方格我們己經不會再使用了,而s+1步所更新的值的位置在它的右邊與下邊,這樣我們就保證了更新的時候沒有哪一次把某個方格的值取了兩次(如果兩個機械人走向同乙個方格,需要特殊判斷)。這樣就保證了演算法的正確性。

#include

#include

usingnamespacestd;

#define maxn 22

inth

[maxn

][maxn

][maxn

][maxn

];intv

[maxn

][maxn

];intn;

voidupdate(intx1

,inty1

,intx2

,inty2

,intval) 

else

}intmain() 

memset(h,0

,sizeof(h));h[

0][0][

0][0]

=v[0

][0];/*

此題最重要的思路是以機械人總共走多少步為物件,由x座標來確定y座標

*/for(ints =

0; s <

2* n -

2; ++s) }}

printf("%d/n"

,h[n -

1][n -

1][n -

1][n -

1]);

return0;}

收集樣本問題(num)

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

樣本收集問題JAVA實現

機械人rob 從方形區域f 的左上角a點出發,向下或向右行走 直到右下角的b 點,在走過的路上,收集方格中的樣本。rob 從a點到b 點共走2次,試找出rob 的2條行走路徑,使其取得的樣本總價值最大。input 第1 行有1 個正整數n,表示方形區域f有n n 個方格。接下來每行有3 個整數,前2...

樣本非平衡問題

正負樣本比例為100 1 甚至1000 1,需要在分布如此不均勻的資料集中學習到有用資訊。造成分類器在多數類精度較高,少數類的分類精度很低。以最大分類精度為目標,導致演算法提高多數樣本分類精度而忽略小樣本的 精度。原因 以邏輯回歸為例,以優化總體精度為目標,不同類別的誤分類情況產生的誤差相同,考慮乙...