HDU 2546 飯卡 動態規劃01揹包

2022-08-09 01:57:09 字數 807 閱讀 2682

題意:給你一些飯菜的**,和你飯卡的餘額,餘額大於等於5元時可以刷任何**的菜,算出你買了這些菜之後飯卡中最少的一組解(餘額可以為負)。

坑爹:這道題中,他的**也就是揹包中的容量,也是揹包中的價值,總餘額如果超出5元要將總餘額減去5元的錢盡量用掉。

解法用到了一點貪心的思想,用乙個sort排序,將便宜的菜買了,盡量將飯卡裡的餘額靠近5元,然後在買乙個最貴的菜,這樣就會讓飯卡裡的餘額最少了。

view code

1 #include2 #include3

using

namespace

std;45

const

int maxn =1000 + 10;6

intf[maxn];

7int

more;89

int max(int a,int

b)10

1314

15void zeroonepack(int cost,int

weight)

1622}23

24int

main()

2540 sort(num,num+n);

41 exp=num[n-1

];42 cin>>money;

43if(money<5)44

48 more=money-5;49

for(i=0; i1; i++)

5053

54 cout

56return0;

57 }

HDU 2546 飯卡 (動態規劃01揹包)

先用5元錢買最貴的東西,然後用剩下的錢買價值最大的東西,也就是01揹包問題。先進行排序,找出最大的,然後對剩下的商品進行動態規劃,而順序不影響。參考部落格 include include include include include include define eps 1e 8 using na...

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