Luogu P2079 燭光晚餐 揹包

2022-05-20 02:15:05 字數 1460 閱讀 9740

p2079 燭光晚餐

小明準備請小紅去一家咖啡廳,共進燭光晚餐。小紅高興地和他一起去了咖啡廳。

小紅說:「小明,你點菜吧。」小明看到選單上有\(n\)道菜,每道菜的**是\(c_i\)。小明對每道菜的喜愛程度是\(x_i\),小紅對每道菜的喜愛程度是\(y_i\)。(喜愛程度可能為負數)(小明:以我對她的了解,我給你的資料不會錯的)

小明帶了\(v\)元錢,他點的菜的總**不能超過\(v\)(小明:當然得我請客啦,顯得我大方。)

小明希望讓小紅吃得開心,所以當然要讓她的總喜愛程度盡量大。當然,小明也要考慮自己的感受,點的所有菜的總喜愛程度需要大於等於\(0\)。(小明:要是我吃得不好,她看見我會難過的)

請你幫小明寫乙個程式,計算出他的總喜愛程度大於等於\(0\)的前提下,小紅的喜愛程度的最大值。(小明:你的程式一定要靠譜啊,我得給她乙個好印象)

第\(1\)行,兩個正整數\(n,v\)。

之後\(n\)行,每行\(3\)個空格隔開的正整數\(c_i\),整數\(x_i,y_i\)。

一行,乙個正整數,表示他的總喜愛程度大於等於\(0\)的前提下,小紅的喜愛程度的最大值。如果這個最大值小於\(0\),輸出\(-1\)。

4 10

5 -1 3

2 2 2

11 -5 100

3 -3 10

5
對於\(10\%\)資料,\(n<=10,v<=50\)。

對於\(30\%\)資料,\(x_i,y_i\geq 0\)。

對於全部資料,\(n\leq 100,v\leq 500,|x_i|\leq 5,|y_i|\leq 1000\)。

負數域下的揹包問題。定義\(dp[i][j]\)為花費為\(i\),小明喜愛程度為\(j\)時小紅的最大喜愛程度。直接轉移就好啦。

\[dp[i][j]=max\

\]因為\(j-x\)可能是負數,所以陣列要開到負數域上,這樣巨集定義一下就好啦:

#define f(a,b) dp[a][b+500]
然後轉移時直接用\(f\),就是簡單的揹包問題了。

#includeusing namespace std;

int n,v,dp[505][1005],ans=-1;

#define f(a,b) dp[a][b+500]

int read()

while(isdigit(ch)) re=(re<<3)+(re<<1)+ch-'0',ch=getchar();

return f?re:-re;

}int main()

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

for(int j=0;j<=500;j++)

ans=max(ans,f(i,j));

printf("%d",ans);

return 0;

}

題目207 食物鏈

描述 動物王國中有三類動物 a,b,c 這三類動物的食物鏈構成了有趣的環形。a吃 b,b吃 c,c吃 a。現有n 個動物,以1 n編號。每個動物都是 a,b,c 中的一種,但是我們並不知道它到底是哪一種。有人用兩種說法對這 n個動物所構成的食物鏈關係進行描述 第一種說法是 1x y 表示x和y 是同...

2 07 素因子分解(20)

給定某個正整數n,求其素因子分解結果,即給出其因式分解表示式 n p1 k1 p2 k2 pm km。輸入格式說明 輸入long int範圍內的正整數n。輸出格式說明 按給定格式輸出n的素因式分解表示式,即 n p1 k1 p2 k2 pm km,其中pi為素因子並要求由小到大輸出,指數ki為pi的...

資料結構207 單詞排序

標題 單詞排序 描述定義乙個二維字元陣列str 10 20 行號表示單詞序號,列號表示單詞最大長度,輸入乙個正整數n n 10 表示單詞數,使用函式wd sort 完成單詞的排序,按字母順序從小到大排列單詞,使用指標完成位址傳遞,主函式完成陣列輸入和輸出。時間限制 1記憶體限制 10000類別1 輸...