hdoj2546 飯卡(DP,01揹包)

2022-09-15 23:27:25 字數 747 閱讀 9438

題目鏈結

思路

首先要判斷卡里的錢是不是大於等於5元,如果不足5元,直接輸出餘額;如果大於等於5元,則先留5元買最貴的菜max_dish,再用剩下的錢買剩餘的菜(不包括最貴的菜),使得菜的總價最大,最大為max_value,max_dish+max_value就是使用卡里的錢所能買到菜的總價的最大值,5 -(max_dish+max_value)就是答案。

**

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;67

const

int n = 1010

;8 vectorv;

9int

n;10

intdp[n];

1112

intmain()

1324

intm;

25 cin >>m;

26if(m - 5

< 0)27

3132 sort(v.begin(), v.end()); //

先排序33

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

不包含最貴的菜

3438 cout<5]-v[n-1]<40return0;

41 }

HDOJ 2546 飯卡 01揹包

題意 卡內有m元錢,有n種菜可以買 每種菜只可以買一次 只要卡內金額大於等於5元就可以買任何菜 刷到負也可以 求最少可使卡上的餘額為多少。思路 最貴的乙個菜一定是最後買,然後用01揹包求 m 5 元錢可買的菜的最大金額,然後 m 最大金額 最貴的菜的價錢 即為所求。include include d...

hdoj2546飯卡 揹包01

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

HDOJ 2546 飯卡 01揹包

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