我想解決一個簡單的DP問題:如何在簡單動態編程概率中跟蹤路徑?
給定一個正整數n,您可以執行以下3個步驟中的任何一個。 1)從中減去1。
2)如果它是被2整除,除以2
3)如果它是被3整除,除以3
請找到的步驟的最小數目取n設置爲1,並打印出的步驟。如果有多個解決方案以相同步驟達到目標,請打印出所有這些解決方案。 (如果很難,至少要打印出其中一種解決方案)。
獲得最小步數並不難。簡單地應用這樣的自下而上的DP解決方案:
public int getMinSteps(int n) {
int[] dp = new int[n+1];
int i;
dp[1] = 0;
for(i = 2 ; i < = n ; i ++) {
dp[i] = 1 + dp[i-1];
if(i%2==0) dp[i] = min(dp[i] , 1+ dp[i/2]);
if(i%3==0) dp[i] = min(dp[i] , 1+ dp[i/3]);
}
return dp[n];
}
但是,我無法解決打印路徑部分。在很高的層面上,我認爲我需要停止每個層面的「行動」,而最低限度是由此決定的?
希望我能在這裏得到一些很好的建議或解決方案。
謝謝!
感謝您的建議。我想我需要找出一個合適的數據結構來存儲這些步驟,因爲可能有很多步驟。更復雜的是,可能有多個步驟的組合。 –
@ user1660652它有點簡單。查看答案中的更新。 –
非常感謝! - 我認爲這會奏效。 –