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...