G 零崎的朋友很多 (0 1揹包修改版 )

2021-08-10 11:15:54 字數 1280 閱讀 3303

零崎有很多朋友,其中有乙個叫做lfj的接盤俠。

lfj是乙個手殘,他和零崎一起玩網遊的時候不好好打本,天天看拍賣行,沒過多久,就成為了乙個出色的商人。不過再出色的投機商也有失手成為接盤俠的一天。所謂真正的接盤俠從來不給自己留活路。當lfj接盤成功之時,即分文不剩之日。

作為lfj的友人,零崎實在看不下去,於是他決定幫lfj一把。當然了,零崎肯定不會自己動手,活還得你們來幹。

lfj可以提供給你們拍賣行所有能買到物品的**和利潤,還有他的本金。既然是接盤俠,就必須分文不剩。雖然零崎想讓你們給出一次接盤中利潤最大的購買方案,但是lfj覺得只要知道最大利潤就可以了。

每組資料第一行為兩個整數p和n,表示本金和拍賣行物品個數。(注意:與b題不同每類物品只有一件

接下來n行,每行兩個資料pi,ci代表第i類物品的利潤和購買**。

1<=p<=20000,1<=n<=300,1<=c,p<=200

對於每組資料,輸出一行,為能獲得的最大利潤

如果不能成功接盤,則輸出jpx

3 1

2 14 3

3 11 3

2 2

jpx

4

使用if直接比較不要呼叫max()以防超時

解題分析:改題和0-1揹包問題類似,不過要求實現將揹包的整個容量v,也就是題目中的本金p,全部用盡,同時要求得到利潤最大。需要對裝入的每件商品進行判斷,首先是能否滿足耗盡本金,另外判斷是否比上次的利潤大。

先給出關鍵的**段配合思考:

1

for(int i=0;i)

2

明白上述講解之後,下面的輸出以及輸入只是按照題目要求進行。

**實現:

1 #include 2

#define max_size 20010

3int

v[max_size];45

using

namespace

std;67

intmain()821

if(v[p]==-1

)22 printf("

jpx\n");

23else

24 printf("

%d\n

",v[p]);25}

26 }

另附0-1揹包的實現**:

1

void zoreonepack(int cost , int

weight)

2

出處: >

100 零崎的朋友很多

時間限制 2000 ms 記憶體限制 65536 kb 總通過人數 233 總提交人數 247 零崎有很多朋友,其中有乙個叫做lfj的接盤俠。lfj是乙個手殘,他和零崎一起玩網遊的時候不好好打本,天天看拍賣行,沒過多久,就成為了乙個出色的商人。時間一長,雖然掙了不少錢,卻沒時間練級了。作為lfj的友...

零崎的朋友很多 (矩陣鏈相乘)

零崎有很多朋友,其中有乙個叫jhljx。jhljx大家很熟悉了,他數學不好也是出了名的,大家都懂。現在jhljx遇到了矩陣乘法,他當時就懵了。數都數不清的他,矩陣乘法怎麼可能會算的清楚呢?雖然零崎覺得還不如讓你們來算,不過好歹也要給jhljx個面子,給她留下乙個證明自己數學實力的機會。為了減小jhl...

SDUT揹包(01)換零錢

有揹包原理並是不是揹包問題。通過滾動陣列來求出和 而不是用揹包來求最優 cpp view plain copy 從前乙個轉態轉移過來,選還是不選 for inti 1 i n i else f i j f i 1 j 一維滾動陣列 for inti 1 i n i for intj m j 1 j ...