8*8的棋盤-最大價值-java刷題

現在有一個8*8的棋盤,上面放着64個價值不等的禮物,每個小的棋盤上面放置一個禮物(禮物的價值大於0小於1000),一個人的
初始位置在棋盤的左上角,每次他只能向下或向右移動一步,並拿走對應棋盤上的禮物,結束位置在棋盤的右下角,請設計一個算
法使其能夠獲得最大價值的禮物。
輸入:
輸入包含多個測試用例,每個測試用例共有8行8列,第i行的第j列的數字代表了該處棋盤上的禮物的價值,每兩個數之間用空格隔開。
輸出:
對於每組測試用例,請輸出你能夠獲得最大價值的禮物。
樣例輸入:
2 8 15 1 10 5 19 19
3 5 6 6 2 8 2 12
16 3 8 17 12 5 3 14
13 3 2 17 19 16 8 7
12 19 10 13 8 20 16 15
4 12 3 14 14 5 2 12
14 9 8 5 3 18 18 20
4 2 10 19 17 16 11 3
樣例輸出:
  194
簡單的動態規劃,最優子結構很明顯。 dp[i][j]能取得的最大值,取決於dp[i-1][j],dp[i][j-1]的最大值這裏對第一行和第一列


單獨處理,因爲只能向右和向下。  


JAVA代碼:

public class Qipan {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int [][] index= new int[8][8];
index[0][0]=input.nextInt();
for(int i=1;i<8;i++){
index[0][i]=input.nextInt()+index[0][i-1];
}
for(int i=1;i<8;i++){
index[i][0]=input.nextInt()+index[i-1][0];
for(int j=1;j<8;j++){
if(index[i][j-1]>index[i-1][j]){
index[i][j]=input.nextInt()+index[i][j-1];
}else{
index[i][j]=input.nextInt()+index[i-1][j];
}
}
}
System.out.println(index[7][7]);
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章