青蛙過橋 (Java)

一座長度爲n的橋,起點的一端座標爲0,且在整數座標i處有a[i]個石頭【0<=a[i]<=4】, 一隻青蛙從座標0處開始起跳,一步可以跳的距離爲1或2或3【即每一步都會落在整數點處】, 青蛙落在i處會踩着該點的所有石頭,求青蛙跳出這座橋最少踩多少個石頭?並且輸出依次跳 過的座標點路線,如果存在多種路線,輸出字典序最小的那一條。

輸入格式:

第一行整數n(<150000),接着下一行會有n+1個由空格隔開的整數,即橋上各個座標處石頭數量。

輸出格式:

第一行爲踩着最少石頭個數,第二行爲依次跳過的座標點【字典序最小的】。

輸入樣例:

在這裏給出兩組輸入。例如:

10
1 2 1 3 0 3 1 2 1 1 2
100
1 2 0 4 0 1 3 4 2 2 1 3 1 4 0 3 0 1 2 3 3 2 2 0 1 0 0 0 0 1 2 1 3 4 0 3 4 4 1 0
4 1 3 1 1 2 3 4 4 4 0 2 0 1 1 1 3 1 3 2 1 2 4 1 2 1 4 1 0 0 1 2 3 0 2 4 4 0 0 4
2 0 0 2 1 3 3 3 0 0 2 0 0 1 2 4 2 2 2 4 0

輸出樣例:

在這裏給出對應的輸出。例如:

4
0 2 4 6 8
36
0 2 4 5 8 10 12 14 16 17 20 23 25 26 27 28 31 34 35 38 39 41 44 47 50 52 54 57 60 63 65 68 69 70 73 74 77 78 81 82 85 88 89 91 92 94 97 100

代碼如下(動態規劃):

import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt()+1;
		int[] stone = new int[n+1];
		int[][] step = new int[n+1][2];
		for(int i=0;i<n;i++)
			stone[i] = sc.nextInt();
		step[0][1] = stone[0];
		for(int i=1;i<=n;i++) {
			//判斷要踩哪塊石頭
			int tmp = i-1;
			if(i-2>=0 && step[tmp][1]>=step[i-2][1])
				tmp = i-2;
			if(i-3>=0 && step[tmp][1]>=step[i-3][1])
				tmp = i-3;
			//順次判斷是否有某處石頭數爲0,有則必須踩才能保證字典序最小,只針對此題
			if(stone[i-1]==0 && step[tmp][1] == step[i-1][1])
				tmp = i-1;
			else if(i-2>=0 && stone[i-2]==0 && step[tmp][1] == step[i-2][1])
				tmp = i-2;
			else if(i-3>=0 && stone[i-3]==0 && step[tmp][1] == step[i-3][1])
				tmp = i-3;
			step[i][0] = tmp;
			step[i][1] = step[tmp][1]+stone[i];
		}
		System.out.println(step[n][1]);
		recursion(n, step);
	}
	public static void recursion(int n, int[][] step) {
		if(step[n][0]!=0) {
			recursion(step[n][0], step);
			System.out.print(" "+ step[n][0]);
		}
		else {
			System.out.print(step[n][0]);
		}
	}
}

這個題目我是用動態規劃做的,其實感覺也是用動態規劃最簡單,思路是:由於青蛙最多隻能跳三步,所以選擇距離它要到達位置的前面三個位置中最小的位置起跳。如果說只統計最少踩的石頭數那麼我的代碼沒什麼問題,但是這個題目還要求字典序最小的輸出座標點,這個我就沒理解明白什麼是最小的字典序,提供的五個測試點只對了三個,代碼僅供參考,如果有大佬看出我代碼中的錯誤請幫我指出,謝謝!

發佈了46 篇原創文章 · 獲贊 42 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章