POJ 2063 Investment 完全揹包

2021-08-08 09:05:14 字數 1062 閱讀 6275

1.完全揹包問題:

有n種物品,每種無限個,第i個物品的體積與價值分為v[i]與w[i],問體積為v的揹包能裝的最大總價值為多少。

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

for(int j=v[i];j<=v;j++)

d[j]=max(d[j],d[j-v[i]]+w[i]);

發現完全揹包的迴圈和使用滾動陣列的0-1揹包只在i的迴圈次序不同。

實際上以上程式是下面程式的優化:

#include #include using namespace std;

int n,v,v[50],w[50],d[50][500];

int main()

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

for(int j=0;j<=v;j++)

cout<

d[i][j]:表示容量為j的揹包使用前i種物品的最大價值

狀態轉移:d[i][j]=max

決策:不裝第i種(d[i-1][j])或者裝第i種(d[i][j-v[i]])

將如下示例打表:

n=3,v=9

a1=2,v1=2 a2=3,v2=3 a3=5,v3=6

j\i123

1000

2222

3233

4444

5456

6666

7678

8889

98910

答案即為d[9]=10

2.poj 2063

原題鏈結

題意:你身上共有m元錢,共有d種債券可以購買,第i種債券的本金為ci,年利息為vi,現在求經過n年你通過買債券最後最多有多少錢。

注:每年得到利息後又可以更換債券購買方案,所以每年都進行一次完全揹包求最大值即可。

**:#include #include #include using namespace std;

int t,c,n,n,c[12],v[12],d[100000];

int main()

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

cout<

POJ 2063 Investment 完全揹包

完全揹包 這題很裸的完全揹包。不過居然還各種re和wa。首先是re 因為每次都會有利息,加上原來的本金之後的資金肯定是會大於原來的最大值。陣列開大個5倍就夠了。因為題意是利息不超過10 年數不超過40.這個隨便算下,或者開個足夠大就行。其次wa的原因 因為我在實現的時候,用了個變數extra去存不足...

POJ 2063 Investment(完全揹包)

poj 2063 investment 題意 有m元本金,想要在銀行存year年,有n種可供選擇的存款方式,每種存款方式都有相應的本金val i 和年獲利interst i 每年的獲利又可以作為下一年的本金繼續儲存。資料範圍 m 1e6,year 40,n 10,val i 是1000的倍數,年獲利...

POJ2063 完全揹包

題意 給乙個初始的錢,年數,然後給出每個物品的購買 與 每年獲得的利益,求在給出的年份後手上有多少錢。思路 揹包重量還是資金。dp 0 初始資金 重物的重量是他的 獲利是價值。這裡有n個物品,還有m年的問題,主要的問題是前i年的最大收益,然後在金額的基礎上對物品處理 記錄每次dp j 的值作為下一年...