poj 2063 zoj 2224 完全揹包問題

2021-06-06 15:29:51 字數 668 閱讀 2374

參考:

題目大意:給你一筆錢,然後給你乙個年限,還有每買乙份債券,到年底能得到多少利息,要你求過了這個年限後,本金加利息的最大值。

每年的年末可以利用上一年得到的本金加利息的錢重新分配一次債券

解題思路:典型的完全揹包問題,每種債券可以買多份》=0,只要不超過本金。

因為每買的債券值不低於1000,所以可以把每次的總值除以1000,還有債券值除以1000,這樣的空間就縮小到0~~~1000中了,而每次得的利息小於1000的不能去買債券,所以能這樣優化。這樣可以縮短很多時間

注意在迴圈每年更新dp時,還是手動用迴圈給dp賦初值0,我用memset(dp,0,sizeof(dp));就超時了,因為每次迴圈是給整個dp賦值

#include #include #include #include using namespace std;

const int maxn = 2001000;

int n, d, total, year, p[11], v[11], dp[maxn];;

int main()

for(int i = 0; i < year; i++)

total += dp[tmp];

}printf("%d\n", total);

}return 0;

}

POJ2063 完全揹包

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

poj 2063 Investment(揹包問題)

很簡單的乙個揹包,題目中已經說了所有債權的 都是1000的整數倍,那直接把 和資本都除以1000就行了。因為資料很小,直接每年都重新選一次債權。我腦子缺氧算的1000000除以1000等於100,wa了三遍才發現錯在哪兒了。include include define n 100005 int dp...

dp之完全揹包poj2063

題意 求投資k年獲得最大投資,每年都選最大利息的方案進行投資k年後就可以得到最多的人民幣。思路 將每一年的 體積 加上利息就好,當然,資料太大,可以除以100減少時間和空間複雜度.反思 很想說,這些我都想到了,但是還是wa了兩次,是因為資料溢位的原因.以前就遇到這樣的原因,木有想到這次我注意了,但還...