資料結構研究之十二 高等動態規劃法

2021-08-15 15:01:21 字數 2067 閱讀 1391

1.硬幣問題

a.題目:給定面值不同的m種硬幣,求支付n元時的最少硬幣數,各硬幣可以重複使用

b.核心思路:關鍵在於使用t[i]j[j]表示用第i種硬幣支付j元的情況,這表示是否使用第i種硬幣

c.**:

//

// created by 葉子 on 2018/2/8.

// 硬幣問題

//#include "iostream"

using namespace std;

static const int nmax = 50000;

static const int infty = ( 1 << 30);

int main()

for ( int i = 0 ; i <=nmax ; i ++) t[i] = infty;

t[0] = 0;

for ( int i = 1 ; i <= m ; i ++)

}cout << t[n] << endl;

return 0;

}

2.揹包問題:

a.現有價值為vi,重量為wi的n個物品,容易為w的揹包,請求出總價值盡可能高並且總重不超過w的總價值的最大值。

b.核心:c[n+1][w+1]是表示前i個物品裝入容量為w的揹包時總價值的最大值

c.**:

//

// created by 葉子 on 2018/2/9.

// 揹包問題

//#include "iostream"

#include "vector"

#include "algorithm"

static const int nmax = 105;

static const int wmax = 10005;

static const int diagonal = 1;

static const int top = 0 ;

using namespace std;

struct item ;

int n,w;

item items[nmax+1];

int c[nmax + 1][nmax + 1],g[nmax+1][wmax+1];

void compute(int &maxvalue,vector&selection)

for ( int i = 1 ; i <= n ; i ++) c[i][0] = 0;

for ( int i = 1 ; i <= n ; i ++)}}

maxvalue = c[n][w];

selection.clear();

for ( int i = n,w=w;i>=1;i--)

}reverse(selection.begin(),selection.end());

}void input()

}int main()

3.最大正方形:

a.題目:求由h*w個小方格組成的一組方格內,除去汙點之外的乾淨瓷磚的最大正方形面積

b.核心:dp[i][j]中儲存著當前座標(i,j)向左上方擴充套件可形成的最大正方形的邊長,然後用動態規劃法依次計算dp[i][j]即可

c.**:

//

// created by 葉子 on 2018/2/9.

// 正方形問題

//#include "cstdio"

#include "algorithm"

using namespace std;

static const int max = 2400;

int dp[max][max],g[max][max];

int getlargestsquare(int h,int w)

}for ( int i = 1 ; i < h ; i ++)else}}

return maxwidth * maxwidth;

}int main(void)

printf("%d\n",getlargestsquare(h,w));

return 0;

}

資料結構 十二 動態規劃

動態規劃一般用於全域性問題,在構造遞迴的時候,一般採用自頂向下分解的方法,先把全域性問題分解成更小的子問題求解。下面舉兩個例子 例子1 有一座高度是10 階的樓梯,從下往上走,每跨一步可以是一級或兩級台階。要求用程式求出一共一共有多少種走法。問題分析建模 首先總共有10 步,假設只剩最後一步就到達第...

高等資料結構 kD Tree

從擁有多個屬性的報表集合 資料庫 中,尋找具有特定屬性且位於指定範圍內的元素,這類問題稱為範圍搜尋。編寫程式,對魔某個二維平面上點的集合,列舉出給定範圍內的點。另外,給定的點集合無法進行點的新增和刪除操作 靜態 輸入 nx0 y0 xn 1 yn 1 qsx0 tx0 sy0 ty0 sxq 1 t...

資料結構(十二)

position binarysearch list l,elementtype x 其中list結構定義如下 typedef int position typedef struct lnode list struct lnode l是使用者傳入的乙個線性表,其中elementtype元素可以通過 ...