揹包問題集合

揹包問題專項

1. 揹包問題_無價值

題目描述

https://www.lintcode.com/problem/backpack/description

解題思路

思路1:利用動態規劃算法,動態更新揹包的裝載量

  1. 新建一個一維動態規劃數組,索引index爲揹包的容量,value爲此容量揹包的最大裝載量。
  2. 遍歷A數組,動態更新揹包:當加入A數組的某元素時,加與不加誰的裝載量大,更新dp。
  3. 輸出dp[len]。
    思路2:
  4. 新建一個二維數組,一維索引爲遍歷第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. 無價值揹包問題,需要動態更新揹包裝載量。

下次遇到此類題我要注意的地方

1. dp數組,索引index代表揹包的容量,value爲此容量揹包的最大裝載量。2. 記得動歸題、揹包題等,索引和value分別代表的意義。
  1. 記得動歸題、揹包題等,索引和value分別代表的意義。
  2. 此題中dp數組,索引index代表揹包的容量,value爲此容量揹包的最大裝載量。

時間、空間複雜度

思路1:
sf:n^2
kf:n

此類題模板代碼

  1. 狀態轉移方程
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]);
			}
		 } 

啓發性或普適性

  1. 動歸題,揹包題,注意好索引和value代表的意義。

總結

  1. 動歸題=數組+索引意義+value意義。

2.

題目描述

解題思路

思路1:

源代碼

題型分析

下次遇到此類題我要注意的地方

時間、空間複雜度

此類題模板代碼

題目描述

解題思路

思路1:

源代碼

題型分析

下次遇到此類題我要注意的地方

時間、空間複雜度

此類題模板代碼

啓發性或普適性

總結

題目描述

解題思路

思路1:

源代碼

題型分析

下次遇到此類題我要注意的地方

時間、空間複雜度

此類題模板代碼

啓發性或普適性

總結

題目描述

解題思路

思路1:

源代碼

題型分析

下次遇到此類題我要注意的地方

時間、空間複雜度

此類題模板代碼

啓發性或普適性

總結

題目描述

解題思路

思路1:

源代碼

題型分析

下次遇到此類題我要注意的地方

時間、空間複雜度

此類題模板代碼

啓發性或普適性

總結

題目描述

解題思路

思路1:

源代碼

題型分析

下次遇到此類題我要注意的地方

時間、空間複雜度

此類題模板代碼

啓發性或普適性

總結

題目描述

解題思路

思路1:

源代碼

題型分析

下次遇到此類題我要注意的地方

時間、空間複雜度

此類題模板代碼

啓發性或普適性

總結

題目描述

解題思路

思路1:

源代碼

題型分析

下次遇到此類題我要注意的地方

時間、空間複雜度

此類題模板代碼

啓發性或普適性

總結

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