dp 背包問題
dp建表:
創建一個二維數組 dp,其中 dp[i][j] 表示使用前 j 個工作,在可用時間為 i 的情況下,能夠獲得的最大分數。
初始化 dp 數組,將所有元素初始化為 0。
填表過程:
使用兩個迴圈來遍歷工作和可用時間。
對於每個工作 j 和可用時間 i,判斷是否可以將該工作納入考慮。
如果 i 大於等於該工作的時間 z[j-1][0],表示可以選擇這個工作。
此時 dp[i][j] 的值等於在選擇該工作和不選擇該工作中,選擇最大分數的情況。
否則, dp[i][j] 的值等於不選擇該工作的情況。
尋找最佳解:
從 dp 數組的最後一行開始,逐行檢查,找到第一個分數大於等於目標分數 m 的時間 i,即為答案。
同時, dp[i][-1] 就是在可用時間為 i 的情況下能夠達到的最大分數。
dp 背包問題
dp建表:
創建一個二維數組 dp,其中 dp[i][j] 表示使用前 j 個工作,在可用時間為 i 的情況下,能夠獲得的最大分數。
初始化 dp 數組,將所有元素初始化為 0。
填表過程:使用兩個迴圈來遍歷工作和可用時間。
對於每個工作 j 和可用時間 i,判斷是否可以將該工作納入考慮。
如果 i 大於等於該工作的時間 z[j-1][0],表示可以選擇這個工作。
此時 dp[i][j] 的值等於在選擇該工作和不選擇該工作中,選擇最大分數的情況。
否則, dp[i][j] 的值等於不選擇該工作的情況。
尋找最佳解:從 dp 數組的最後一行開始,逐行檢查,找到第一個分數大於等於目標分數 m 的時間 i,即為答案。
同時, dp[i][-1] 就是在可用時間為 i 的情況下能夠達到的最大分數。
-------------------
----------------------
----------------------------------------
下面是程式碼
dp 背包問題
dp建表:
創建一個二維數組 dp,其中 dp[i][j] 表示使用前 j 個工作,在可用時間為 i 的情況下,能夠獲得的最大分數。
初始化 dp 數組,將所有元素初始化為 0。
填表過程:使用兩個迴圈來遍歷工作和可用時間。
對於每個工作 j 和可用時間 i,判斷是否可以將該工作納入考慮。
如果 i 大於等於該工作的時間 z[j-1][0],表示可以選擇這個工作。
此時 dp[i][j] 的值等於在選擇該工作和不選擇該工作中,選擇最大分數的情況。
否則, dp[i][j] 的值等於不選擇該工作的情況。
尋找最佳解:從 dp 數組的最後一行開始,逐行檢查,找到第一個分數大於等於目標分數 m 的時間 i,即為答案。
同時, dp[i][-1] 就是在可用時間為 i 的情況下能夠達到的最大分數。-------------------
----------------------
----------------------------------------
下面是程式碼
-------------------