題目描述:
某總公司擁有高效生產裝置m臺,準備分給下屬的n個分公司。各分公司若獲得這些裝置,可以為總公司提供一定的盈利。問:如何分配這m臺裝置才能使國家得到的盈利最大?求出最大盈利值。 分配原則:每個公司有權獲得任意數目的裝置,但總台數不得超過總裝置數m。其中m<=100,n<=100。
輸入:
第一行為兩個整數m,n。接下來是乙個n×m的矩陣,其中矩陣的第i行的第j列的數aij表明第i個公司分配j臺機器的盈利。所有資料之間用乙個空格分隔。
輸出:
只有乙個資料,為總公司分配這m臺裝置所獲得的最大盈利。
樣例輸入
3 21 2 3
2 3 4
樣例輸出
4
【分析】動態規劃基礎題型。
dp[i][j]
表示前i+1個公司分配j+1臺機器時的最大盈利。(因為i,j下標從0開始)
d p[
i][j
]=ma
xk(d
p[i−
1][j
],dp
[i−1
][j−
k]+a
[i−1
][k−
1]
)dp[i][j]=max_k(dp[i-1][j],dp[i-1][j-k]+a[i-1][k-1])
dp[i][
j]=m
axk
(dp[
i−1]
[j],
dp[i
−1][
j−k]
+a[i
−1][
k−1]
) (注:a的下標從0開始的,dp的下標計算從1開始的;前面的和數dp[i-1][j]
其實是後面k=0時的情況,就是第i個公司不分配機器的意思,因為後面a不會遍歷到這個情況,故在前面加上。)
def solution(a,m,n):
dp=[[0 for k in range(m+1)]for i in range(n+1)]
#dp_ij表示前i+1個公司分配j臺機器的最大盈利
for i in range(1,n+1):
for j in range(1,m+1):
dp[i][j]=max([dp[i-1][j]]+[dp[i-1][j-k]+a[i-1][k-1] for k in range(1,j+1)])
return dp[-1][-1]
s=map(int,raw_input().split(" ")) #m,n
a=for n in range(s[1]):
print(solution(a,s[0],s[1]))
#測試用例:
s=[15,10] #15臺機器,10個公司
a=[[ 36, 107, 184, 283, 286, 292, 361, 393, 425, 469, 475, 496, 577,656, 713],
[ 67, 68, 120, 136, 207, 279, 327, 413, 443, 521, 534, 542, 632,643, 719],
[ 86, 136, 223, 273, 315, 317, 363, 369, 455, 554, 570, 591, 657,670, 685],
[ 8, 105, 179, 217, 306, 332, 373, 387, 407, 478, 520, 547, 645,670, 685],
[ 82, 99, 198, 249, 291, 372, 453, 542, 561, 589, 603, 654, 700,730, 757],
[ 88, 104, 134, 140, 224, 227, 277, 302, 358, 440, 530, 587, 635,715, 770],
[ 1, 61, 113, 117, 209, 223, 286, 289, 336, 364, 405, 431, 527,573, 642],
[ 96, 176, 247, 312, 346, 375, 410, 419, 477, 572, 574, 587, 620,676, 744],
[ 75, 127, 225, 296, 370, 370, 463, 473, 491, 537, 602, 664, 680,721, 728],
[ 82, 133, 205, 205, 272, 295, 316, 393, 445, 512, 593, 637, 680,707, 745]]
#輸出:1167
def solution(a,m,n):
dp=[[0 for k in range(m+1)]for i in range(n+1)]
#dp_ij表示前i+1個公司分配j臺機器的最大盈利
for i in range(1,n+1):
for j in range(1,m+1):
dp[i][j]=max([dp[i-1][j]]+[dp[i-1][j-k]+a[i-1][k-1] for k in range(1,j+1)])
return dp[-1][-1]
print(solution(a,s[0],s[1]))
DP 機器分配
總公司擁有高效生產裝置m臺,準備分給下屬的n個公司。各分公司若獲得這些裝置,可以為國家提供一定的盈利。問 如何分配這m臺裝置才能使國家得到的盈利最大?求出最大盈利值。其中m 15,n 10。分配原則 每個公司有權獲得任意數目的裝置,但總台數不得超過總裝置數m。第一行儲存兩個數,第乙個數是裝置台數m,...
機器分配 DP
題目 總公司擁有高效生產裝置m臺,準備分給下屬的n個公司。各分公司若獲得這些裝置,可以為國家提供一定的盈利。問 如何分配這m臺裝置才能使國家得到的盈利最大?求出最大盈利值。其中m 15,n 10。分配原則 每個公司有權獲得任意數目的裝置,但總台數不得超過總裝置數m。輸入 第一行儲存兩個數,第乙個數是...
機器分配 dp
時間限制 1000 ms 記憶體限制 65536 kb 提交數 1693 通過數 867 總公司擁有高效裝置m臺,準備分給下屬的n個分公司。各分公司若獲得這些裝置,可以為國家提供一定的盈利。問 如何分配這m臺裝置才能使國家得到的盈利最大?求出最大盈利值。其中m 15,n 10。分配原則 每個公司有權...