JZOJ 2059J 稀有逛超市

2021-07-23 02:26:32 字數 1721 閱讀 3516

【題目背景】

眾所周知,機房裡有三個人,乙個是 thu 的,乙個是 pku 的,最弱的是 fdu 的。稀有就 是那個 fdu 的„稀有特別喜歡吃東西,但是又喜歡打遊戲„結果就忙得不可開交„

【問題描述】

稀有打算去超市買點東西,他身上共有 n 元錢,其中 k 元錢都是準備用來買遊戲打的, 因此十分蛋疼的就是剩下的錢安排買什麼了。超市的每件東西有很多類,第一類只有**和 給稀有帶來的愉悅值,但是每種只有一件;第二類每種有無數件,同樣有**和愉悅值;其 他類除了每一種有**和愉悅值之外,每一類一共只能取一件。(我會告訴你稀有去了 hz 之後身上沒錢了?)

輸入檔案 shop.in 共有 m+1 行。

第一行包含三個整數,n,k,m,n,k 如題意,m 為東西個數。

第二至 m+1 行包含三個正整數,分別表示** pi,愉悅值 wi,屬於哪一類 ci。

輸出檔案 shop.out 只有一行,最大愉悅值。

100 70 2

31 1000 1

30 2 2

2 樣例解釋:買第二件啊!只買得起第二件了啊!有木有!!坑爹啊,愉悅值只有 2 啊!!

對於 50%的資料,只含前兩類物品。

對於 100%的資料,k<=n<=20000,m<=1000,|wi|<=10000,|pi|<=10000。

最多一共有 1000 類物品,型別最大為第 1000 類。

這題顯然是3個揹包嘛。第一類的01揹包,第二類的無限揹包。

這樣可以拿50分。

至於第三個揹包,我們知道同一類物品最多隻能夠選乙個,所以我們要在每一類物品中選最優的那乙個。 f[

j]=m

ax(f

[j−a

[k].

p]+a

[k].

w) (

其中a表

示類數》2的

物品,所

有的a[

k].c

都是一樣

的(c表

示類別)

)

#include

#include

#include

#include

#include

#define n 20010

#define fo(i,a,b) for(i=a;i<=b;i++)

#define fd(i,a,b) for(i=a;i>=b;i--)

using namespace std;

struct note

;note a1[n],a2[n],a3[n];

bool cmp(note x,note y)

int f[n],i,j,k,last,n,m,ans,x,y,z,_1,_2,_3;

int main()

fo(i,1,_1)

fd(j,n,a1[i].p)

f[j]=max(f[j],f[j-a1[i].p]+a1[i].w);

fo(i,1,_2)

fo(j,a2[i].p,n)

f[j]=max(f[j],f[j-a2[i].p]+a2[i].w);

sort(a3+1,a3+_3+1,cmp);

last=1;

fo(i,1,_3)

if (a3[i].c!=a3[i+1].c)

fo(i,0,n) ans=max(ans,f[i]);

printf("%d",ans);

}

2 05公尺的繩子

發現失火的時候,已經晚了。男人拉著女人衝向樓梯,卻被大火撲回。火勢迅速蔓延,整棟大樓像一塊瘋狂燃燒的炭,將每一寸空間烤成滾燙的烙鐵。儘管他們關緊房門,火舌和濃煙還是從門縫裡一絲一絲往裡擠。狹小的房間,逐漸變得熾熱難當。是午夜。某城的乙個賓館。男人和女人站在視窗呼救,拼命揮動手臂。他們看見消防隊員架起...

struts2 05 action萬用字元

實現動態訪問還可以通過萬用字元 eg success jsp 當訪問時 如果輸入 http localhost 8080 demo useradd 就會匹配到這個action。這時 就匹配為add 後面method的1的意思是第乙個星號,所以 也就是等於 method add 下面同理。即 succ...

205 接力賽跑

題目描述 n只奶牛 編號為1 n 在進行乙個特別的接力賽跑,這個比賽特別之處在於,若干只奶牛可以同時跑。在t 0時刻,牛1開始沿著跑道跑,l 1秒後跑完一圈重新到達起點線。通常,牛i跑完一圈需要的時間為l i秒。當牛1重新越過起點線的瞬間,它會通知另外m 1只奶牛立即起跑。通常,牛i會通知另外m i...