動態規劃之01揹包

2021-10-05 07:10:37 字數 1270 閱讀 4113

題目描述【版權說明】

本題為改編題。

【問題描述】

發鳩之山,其上多柘木。有鳥焉,其狀如烏,文首,白喙,赤足,名曰精衛,其名自詨。是炎帝之少女,名曰女娃。女娃遊於東海,溺而不返,故為精衛。常銜西山之木石,以堙於東海。——《山海經》

精衛終於快把東海填平了!只剩下了最後的一小片區域了。同時,西山上的木石也已經不多了。精衛能把東海填平嗎?

事實上,東海未填平的區域還需要至少體積為v的木石才可以填平,而西山上的木石還剩下n塊,每塊的體積和把它銜到東海需要的體力分別為k和m。精衛已經填海填了這麼長時間了,她也很累了,她還剩下的體力為c。

輸入格式 輸入檔案的第一行是三個整數:v、n、c。

從第二行到第n+1行分別為每塊木石的體積和把它銜到東海需要的體力。

輸出格式 輸出檔案只有一行,如果精衛能把東海填平,則輸出她把東海填平後剩下的最大的體力,否則輸出』impossible』(不帶引號)。

輸入輸出樣例

輸入 #1

100210

505505

輸出 #1

0
輸入 #2

1021

505102

輸出 #2

impossible
說明/提示 【資料範圍】

對於20%的資料,0dp[j]=max(dp[j],dp[j-w[i]]+v[i]);/即找出j時的最大價值,不斷遞推。

**:

#include

using

namespace std;

typedef

long

long

int ll;

const ll n=

1e5+10;

ll w[n]

,v[n]

,dp[n]

,s,n,c;

//價值v[i],體積w[i],dp[i]記錄能裝的最大價值

intmain()

//如果 j}

int i=c;

if(dp[c]

"impossible"

return0;

}

動態規劃之01揹包

動態規劃的基本思想 將乙個問題分解為子問題遞迴求解,且將中間結果儲存以避免重複計算。通常用來求最優解,且最優解的區域性也是最優的。求解過程產生多個決策序列,下一步總是依賴上一步的結果,自底向上的求解。動態規劃演算法可分解成從先到後的4個步驟 1.描述乙個最優解的結構,尋找子問題,對問題進行劃分。2....

動態規劃之01揹包

01揹包問題,是用來介紹動態規劃演算法最經典的例子,網上關於01揹包問題的講解也很多,我寫這篇文章力爭做到用最簡單的方式,最少的公式把01揹包問題講解透徹。f i,j 表示在前i件物品中選擇若干件放在承重為 j 的揹包中,可以取得的最大價值。pi表示第i件物品的價值。決策 為了揹包中物品總價值最大化...

動態規劃 01揹包

最優二叉查詢樹.cpp 定義控制台應用程式的入口點。01揹包問題。include stdafx.h include include define n 3 the number of real node define m 10 using namespace std int tmain int arg...