初入演算法篇(動態規劃)書架問題2

2021-08-18 02:46:31 字數 1233 閱讀 1983

題意:將n本書按高度由小到大排序,然後求出書架的不整齊度。不整齊度=每兩本書寬度的差的絕對值的和

如有4本書    1*2   5*3  2*4  3*1  

排序後     1*2  2*4  3*1  5*3

不整齊度就是2+3+2=7,求出去掉k本書後最小不整齊度

題解:逆向思維,求出n-k本書的最小不整齊度即可

轉移方程為 f[i][j]=min

注意i,j,x的範圍i==[1,n]    j==[2,min]    x==[j-1,i-1]

題目要求了不高度都不相同,但參考**明顯有bug,測試資料也是,加深理解即可,不需要糾結

我個人認為直接sort函式由小到大直接解決....

4 1

2 22 4

3 25 3 輸出 1

15 3

2 22 4

3 21 3

1 23 6

4 85 6

6 72 3

3 31 2

2 23 4

5 4 輸出 24

#include #include #include #include #include #define inf 999999

using namespace std;

struct node

a[1009];

int cmp(const void *a,const void *b)

int cmp1(node a,node b)

int f[1009][1009];

int main()

a[0].h=-1;

qsort(a,n+1,sizeof(a[0]),cmp);

/*sort(a+1,a+1+n,cmp1);

printf("\n\n");

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

a[0].h=-1;

qsort(a,n+1,sizeof(a[0]),cmp);

printf("\n\n");

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

*/for(i=1; i<=n; i++)}}

int ans=f[n-k][n-k];//從n-k本書取n-k本書

for(i=n-k; i<=n; i++)

printf("%d\n",ans);

}}

面試初入演算法(九) 動態規劃

將乙個複雜的問題拆分為重複的子問題,確保每乙個問題都是最優解,從而得出全域性最優解,用遞迴的方式,常用的動態規劃會要求求最大值,最少的方法等。分治 遞迴 動態規劃 貪心演算法區別 看部落格 動態規劃的關鍵點 最優子結構 儲存中間狀態 得出dp公式 現在以乙個簡單的題進入,從而了解什麼是動態規劃 斐波...

初入演算法篇(遞迴) poj1664

放蘋果 time limit 1000ms memory limit 10000k total submissions 35996 accepted 22239 description 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,...

演算法 動態規劃(2)

練習2 在一組數中選擇幾個數字使其加起來和最大,但是選中的幾個數字不能相鄰,求最大的和 以以下這組資料舉栗子 我們依舊是之前的思想 選或者不選!依舊是最優解opt i 代表到第i個元素最優解是什麼 代表選擇第i個 代表不選擇第i個 我們發現這個展開圖中依舊出現了重疊子問題 比如opt 3 和opt ...