【題目背景】
眾所周知,機房裡有三個人,乙個是 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...