題目背景
約翰先生獲得了一大筆遺產,他暫時還用不上這一筆錢,他決定進行投資以獲得更大的效益。
銀行工作人員向他提供了多種債券,每一種債券都能在固定的投資後,提供穩定的年利息。
當然,每一種債券的投資額是不同的,一般來說,投資越大,收益也越大,
而且,每一年還可以根據資金總額的增加,更換收益更大的債券。
題目描述
例如:有如下兩種不同的債券:①投資額 4000,年利息 400;②投資額 3000,年利息 250。
初始時,有 10000 的總資產,可以投資兩份債券①債券,一年獲得 800 的利息;
而投資乙份債券①和兩份債券②,一年可獲得 900 的利息,兩年後,可獲得 1800 的利息;
而所有的資產達到 11800,然後將賣掉乙份債券②,換購債券①,年利息可達到 1050;
第三年後,總資產達到 12850,可以購買三份債券①,年利息可達到 1200,第四年後,總資產可達到 $14050。
現給定若干種債券、最初的總資產,幫助約翰先生計算,經過 n 年的投資,總資產的最大值。
輸入格式
第一行為三個正整數 s, n, d,分別表示最初的總資產、年數和債券的種類。
接下來 d 行,每行表示一種債券,兩個正整數 a, b 分別表示債券的投資額和年利息。
輸出格式
僅乙個整數,表示 n 年後的最大總資產。
輸入樣例
10000 4 2
4000 400
3000 250
輸出樣例
14050
說明/提示
s ≤ 106,n ≤ 40,d ≤ 10,a ≤ 104,且 a 是 1000 的倍數,b 不超過 a 的 10%。
題解
完全揹包(優化2.0):
由於 a 是 1000 的倍數,所以將 a, s 除以 1000 可以達到節省空間與加快執行速度的效果。
#include
using
namespace std;
const
int n =
10, m =
1e8;
int s, n, d;
int a[n]
, b[n]
, f[m]
;int
main()
while
(n --)
cout << s << endl;
return0;
}
Luogu 1853 投資的最大效益
題目背景 約翰先生獲得了一大筆遺產,他暫時還用不上這一筆錢,他決定進行投資以獲得更大的效益。銀行工作人員向他提供了多種債券,每一種債券都能在固定的投資後,提供穩定的年利息。當然,每一種債券的投資額是不同的,一般來說,投資越大,收益也越大,而且,每一年還可以根據資金總額的增加,更換收益更大的債券。題目...
P1853 投資的最大效益
約翰先生獲得了一大筆遺產,他暫時還用不上這一筆錢,他決定進行投資以獲得更大的效益。銀行工作人員向他提供了多種債券,每一種債券都能在固定的投資後,提供穩定的年利息。當然,每一種債券的投資額是不同的,一般來說,投資越大,收益也越大,而且,每一年還可以根據資金總額的增加,更換收益更大的債券。例如 有如下兩...
洛谷1018 乘積最大
原題位址 劃分型 dp字串 解題思路 1.預處理一下,把i到j擷取的子串轉化為數字 2.明確dp陣列表示的狀態,f i k 表示在前i個字元劃分k次得到的最大乘積 3.初始化,f i 0 t 0 i 0 i 4.三重迴圈跑dp,最外層列舉劃分次數,第二層列舉i,最內一層列舉斷點 斷點在0到i 1範圍...