雖然最大子矩陣,滑雪,石子合併等問題也足夠經典,我還是從中找了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 提供乙個持續的事務管...