揹包問題專項
1. 揹包問題_無價值
題目描述
https://www.lintcode.com/problem/backpack/description
解題思路
思路1:利用動態規劃算法,動態更新揹包的裝載量
- 新建一個一維動態規劃數組,索引index爲揹包的容量,value爲此容量揹包的最大裝載量。
- 遍歷A數組,動態更新揹包:當加入A數組的某元素時,加與不加誰的裝載量大,更新dp。
- 輸出dp[len]。
思路2: - 新建一個二維數組,一維索引爲遍歷第i個元素,二維索引爲容量爲j的揹包,value爲遍歷第i個元素,容量爲j的揹包的最大裝載量。
源代碼
思路1:
class Solution {
public:
/**
* @param m: An integer m denotes the size of a backpack
* @param A: Given n items with size A[i]
* @return: The maximum size
*/
int backPack(int m, vector<int> &A) {
// write your code here
int len = A.size();
int dp[m+1] = {0};
for(int i = 0; i < len; i++)
{
for(int j = m; j >= A[i]; j--)
{
dp[j] = max(dp[j], dp[j-A[i]] + A[i]);
}
}
return dp[m];
}
};
思路2:
/**
* @param m: An integer m denotes the size of a backpack
* @param A: Given n items with size A[i]
* @return: The maximum size
*/
public int backPack(int m, int[] A) {
int n = A.length;
int dp[][] = new int[n+1][m+1];
for(int i = 0; i < n; i ++){
for(int j = 0; j <= m ; j ++){//爲了放入第i個物品,找到對於特定空間j的最優放置方案
if(A[i] > j){//第i件大小大於當前揹包大小
dp[i+1][j] = dp[i][j];
}else{
dp[i+1][j] = Math.max(dp[i][j],dp[i][j-A[i]] + A[i]);//是否爲了放置新的而拿出舊的
}
}
}
return dp[n][m];
}
題型分析
- 無價值揹包問題,需要動態更新揹包裝載量。
下次遇到此類題我要注意的地方
易 | 中 | 難 | |
---|---|---|---|
緊 | 1. dp數組,索引index代表揹包的容量,value爲此容量揹包的最大裝載量。2. 記得動歸題、揹包題等,索引和value分別代表的意義。 | ||
般 | |||
必 |
- 記得動歸題、揹包題等,索引和value分別代表的意義。
- 此題中dp數組,索引index代表揹包的容量,value爲此容量揹包的最大裝載量。
時間、空間複雜度
思路1:
sf:n^2
kf:n
此類題模板代碼
- 狀態轉移方程
for(int i = 0; i < len; i++)
{
for(int j = 1; j <= m; j++)
{
dp[i][j] = max(dp[i][j], dp[i][j-A[i]] + A[i]);
}
}
啓發性或普適性
- 動歸題,揹包題,注意好索引和value代表的意義。
總結
- 動歸題=數組+索引意義+value意義。
2.
題目描述
解題思路
思路1:
源代碼
題型分析
下次遇到此類題我要注意的地方
易 | 中 | 難 | |
---|---|---|---|
緊 | |||
般 | |||
必 |
時間、空間複雜度
此類題模板代碼
題目描述
解題思路
思路1:
源代碼
題型分析
下次遇到此類題我要注意的地方
易 | 中 | 難 | |
---|---|---|---|
緊 | |||
般 | |||
必 |
時間、空間複雜度
此類題模板代碼
啓發性或普適性
總結
題目描述
解題思路
思路1:
源代碼
題型分析
下次遇到此類題我要注意的地方
易 | 中 | 難 | |
---|---|---|---|
緊 | |||
般 | |||
必 |
時間、空間複雜度
此類題模板代碼
啓發性或普適性
總結
題目描述
解題思路
思路1:
源代碼
題型分析
下次遇到此類題我要注意的地方
易 | 中 | 難 | |
---|---|---|---|
緊 | |||
般 | |||
必 |
時間、空間複雜度
此類題模板代碼
啓發性或普適性
總結
題目描述
解題思路
思路1:
源代碼
題型分析
下次遇到此類題我要注意的地方
易 | 中 | 難 | |
---|---|---|---|
緊 | |||
般 | |||
必 |
時間、空間複雜度
此類題模板代碼
啓發性或普適性
總結
題目描述
解題思路
思路1:
源代碼
題型分析
下次遇到此類題我要注意的地方
易 | 中 | 難 | |
---|---|---|---|
緊 | |||
般 | |||
必 |
時間、空間複雜度
此類題模板代碼
啓發性或普適性
總結
題目描述
解題思路
思路1:
源代碼
題型分析
下次遇到此類題我要注意的地方
易 | 中 | 難 | |
---|---|---|---|
緊 | |||
般 | |||
必 |
時間、空間複雜度
此類題模板代碼
啓發性或普適性
總結
題目描述
解題思路
思路1:
源代碼
題型分析
下次遇到此類題我要注意的地方
易 | 中 | 難 | |
---|---|---|---|
緊 | |||
般 | |||
必 |