HDU 2546(貪心 01揹包)

2021-09-26 11:15:23 字數 818 閱讀 1904

hdu 2546

先貪心以下,然後剩下的再用01揹包求解即可。

1、如果餘額<5,不夠買,那麼直接輸出m即可。

2、如果餘額》=5,那麼先拿出五塊錢來買**最大的菜。

然後剩餘的錢再用01揹包算能花掉的最多的錢。

然後結合起來節課

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

1e3+10;

int dp[maxn]

;int price[maxn]

;int

main()

//如果餘額夠買,那麼先貪心一下,將五塊拿去買**最大的那個菜。

//剩餘的錢01揹包求取能劃掉的最多的錢,然後結合起來即為答案。

sort

(price +

1, price +

1+ n)

; n--

; m -=5

;for

(int i =

1; i <= n; i++

)//對於除了**最高的每乙個菜

}printf

("%d\n"

, m +

5+ dp[m]

- price[n +1]

);}return0;

}

HDU 2546飯卡 01揹包 貪心

這道題有個小小的坎,就是低於5塊不能選,大於5塊,可以任意選,所以就在初始條件判斷一下剩餘錢數,然後如果大於5的話,這時候就要用到貪心的思想,只要大於等於5,先找最大的那個,然後剩下的再去用揹包去選擇,這樣的結果一定是最優的。因為最大的那個一定會被選中,剩下多少錢都無所謂,用揹包可以獲得剩下的最優解...

HDU2546 飯卡 01揹包

problem description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功 即使購買後卡上餘額為負 否則無法購買 即使金額足夠 所以大家都希望盡量使卡上的餘額最少。某天,食堂中有n種菜 每種菜可購買一...

HDU 2546 飯卡 01揹包

我的做法是找出n種菜中最貴的 k,把揹包的容量m增加的到m k 然後對 排個序,因為dp是從第乙個菜到最後乙個菜,越貴的菜越後選結果越小,然後進行dp include include include include using namespace std const int maxn 1010 in...