動態規劃經典五題

2021-06-27 01:26:59 字數 2805 閱讀 1186

雖然最大子矩陣,滑雪,石子合併等問題也足夠經典,我還是從中找了5道最經典的dp寫了這篇博文。有n

件物品和乙個容量為

v的揹包。第

i件物品的費用是

c[i]

,價值是

w[i]

。求解將哪些物品裝入揹包可使價值總和最大。

轉移方程:dp[i][j] = max(dp[i-1][j],dp[i-1][j-weight[i]] + value[i]

數塔問題 :要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?

轉移方程:sum[i] = max(a[左孩子] , a[右孩子]) + a[i]

#include "stdio.h"

#define n 5

main(),,,

,};for(i = n-1; i > 0; i--)

for(j = 0; j < i; j++)

data[i-1][j] += data[i][j] > data[i][j+1] ? data[i][j] : data[i][j+1];

printf("%d",data[0][0]);

}

給定k個整數的序列,其任意連續子串行可表示為,其中 1 <= i <= j <= k。最大連續子串行是所有連續子序中元素和最大的乙個, 例如給定序列,其最大連續子串行為,最大和為20。

狀態轉移方程: 

sum[i]=max(sum[i-1]+a[i],a[i])

#include"stdio.h"
main();

int *b;

b = (int *)malloc(sizeof(a));

length = sizeof(a)/sizeof(a[0]);

for(i = 0; i < length; i++)

} }for(i = 0; i < length; i++)

if(b[i] > max)

max = b[i];

printf("%d",max);

}

給定乙個序列

an= 

a1 ,a2 ,  ... , an

,找出最長的子串行使得對所有 

i ai

轉移方程:b[k]=max(max(b[j]|a[j]

#include "stdio.h"

main();

int *b;

b = (int *)malloc(sizeof(a));

length = sizeof(a)/sizeof(a[0]);

for(i = 0; i < length; i++)

} }for(i = 0; i < length; i++)

if(b[i] > max)

max = b[i];

printf("%d",max);

}

乙個序列 s ,如果分別是兩個或多個已知序列的子串行,且是所有符合此條件序列中最長的,則 s 稱為已知序列的最長公共子串行。

轉移方程:

dp[i,j] = 0                                          i=0 || j=0

dp[i,j] = dp[i-1][j-1]+1                        i>0,j>0, a[i] = b[j]       

dp[i,j] = max(dp[i-1][j],dp[i][j-1])        i>0,j>0, a[i] != b[j]

#include "stdio.h"

#define m 8

#define n 6

void printlsc(int i, int j,char *a, int status[n])else

}main();

char b = ;

int status[m][n]; //儲存狀態

int dp[m][n];

for(i = 0; i < m; i++)

for(j = 0; j < n; j++)

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

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

else if(dp[i][j-1] >= dp[i-1][j])

else

} printf("最大長度:%d",dp[m-1][n-1]);

printf("\n");

printlsc(m-1,n-1,a,status);

printf("\n");

}

動態規劃經典5題

dp一年多沒碰過了,今天突然想找找感覺,找了經典的幾道dp複習著敲了敲。雖然最大子矩陣,滑雪,石子合併等問題也足夠經典,我還是從中找了5道最經典的dp寫了這篇博文,如果您是大一,大二想踏入程式競賽的同學可以當習題做做,如果您像我一樣不是acmer,平時專案中也很少用dp,同樣可以回顧一下dp的奧妙。...

複製書稿(動態規劃經典題)

problem description 現在要把m本有順序的書分給k個人複製 抄寫 每乙個人的抄寫速度都一樣,一本書不允許給兩個 或以上 的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第 一 第三和第四本書給同乙個人抄寫。現在請你設計一種方案,使得複製時間最短。複製時間為抄寫頁數最多的人用去的...

每日五題 Spring

控制反 spring通過控制反轉實現了鬆散耦合,物件們給出它們的依賴,而不是建立或查詢依賴的物件們。面向切面的程式設計 aop spring支援面向切面的程式設計,並且把應用業務邏輯和系統服務分開。容器 spring 包含並管理應用中物件的生命週期和配置。事務管理 spring 提供乙個持續的事務管...