題目描述
小偉突然獲得一種超能力,他知道未來t
tt天n
nn種紀念品每天的**。某個紀念品的**是指購買乙個該紀念品所需的金幣數量,以及賣出乙個該紀念品換回的金幣數量。每天,小偉可以進行以下兩種交易 無限次:
任選乙個紀念品,若手上有足夠金幣,以當日**購買該紀念品;
賣出持有的任意乙個紀念品,以當日**換回金幣。
每天賣出紀念品換回的金幣可以立即用於購買紀念品,當日購買的紀念品也可以當日賣出換回金幣。當然,一直持有紀念品也是可以的。t
tt 天之後,小偉的超能力消失。因此他一定會在第t
tt天賣出所有紀念品換回金幣。小偉現在有m
mm枚金幣,他想要在超能力消失後擁有盡可能多的金幣。
輸入格式
輸入第一行包含三個正整數t,n
,m
t,n,m
t,n,
m,相鄰兩數之間以乙個空格分開,分別代表未來天數 t
tt,紀念品數量n
nn,小偉現在擁有的金幣數量mmm。
接下來t
tt行,每行包含n
nn個正整數,相鄰兩數之間以乙個空格分隔。第i
ii行的n
nn個正整數分別為 pi,
1,pi
,2,…
…,pi
,n
p_, p_, \ldots \ldots ,p_
pi,1,
pi,2
,……
,pi,
n,其中pi,
jp_
pi,j
表示第 i
ii 天第 j
jj 種紀念品的**。
t
≤100,n
≤100,m
≤103
t \leq 100,n \leq 100,m \leq 10^3
t≤100,
n≤10
0,m≤
103,所有**1≤p
i,j≤
10
41 \leq p_ \leq 10^4
1≤pi,j
≤10
4輸出格式
輸出僅一行,包含乙個正整數,表示小偉在超能力消失後最多能擁有的金幣數量。
分析此題雖然是完全揹包,但是很不容易發現如何解題,最大的坑點就是如果非要考慮手上有多少個某種物品,那就gg了。
實際上無需考慮手上有多少物品。每天的獲利由與前一天的**差決定,而手頭有多少物品完全可以等價為手頭的金幣,然後我們只需要確定賣多少物品即可得到在這一天能獲利多少,然後可能會考慮到某天買或者不買,實際上這也是不需要考慮的,因為如果我們計算出每天能獲得的最大價值w
ww,那麼下一天手上的金幣數量就是[0,
w]
[0,w]
[0,w
],因為我們會列舉金幣數目,這也就能從手頭所有可能的金幣數目。
總的來說,是將手頭的金幣看做揹包容量,物品當天的價值看做物品體積,和下一天的差價看做物品價值。此題比較難想的一天是對前t−1
t-1t−
1天每天dp。
#include .h>
using namespace std;
const
int maxn=
2e5+10;
int a[
105]
[105];
int d[maxn]
;int
main()
for(
int i=
1;i)printf
("%d\n"
,m);
return0;
}
紀念品分組
問題描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得的紀念品價值 相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整數。為了保證在盡量短的時 間內發完所有紀念品,樂樂希望分組的數目最少。你的任務...
紀念品分組
time limit 1 sec memory limit 128 mb submit 4 solved 2 submit status web board 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據 進行分組,但...
紀念品分組
題目描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整數。為了保證在盡量短的時間內發完所有紀念品,樂樂希望分組的數目最少。你的任務是...