HDU2546 飯卡 揹包

2022-03-01 06:43:16 字數 1130 閱讀 5440

開始寫成01揹包的形式,求m元可買物品價值的最大值

dp[j] =max(dp[j],dp[j-pri[i]] +pri[i])

結果為m - dp[m] 

但後來發現是有問題的, 比如這組過不去

515 14 13 13 42

60正解應該m-5 >= 0時買盡量多的物品,然後剩下的錢買價值最大的物品。

1 #include

2 #include

3 #include

4 #include

5 #include

6 #include

7 #include

8 #include

9 #include

10 #include

11using

namespace std;

12 typedef long

long ll;

13const

int n = 10008, inf = 0x3f3f3f3f;

14#define ms(a, num) memset(a, num, sizeof(a))

15int pri[n];

16int num[5000];

17int main()

26         scanf("

%d", &m);

27         sort(pri, pri + n);

28if(m < 5)

32         m -= 5;

33for(int i= 0; i < n - 1; i++)

37         }

38         printf("

%d\n

", m + 5 - pri[n - 1] - num[m]);

39     }

40return

0;41

}

hdu2546 飯卡(揹包)

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

hdu 2546 飯卡(揹包)

設飯卡餘額為total 此題經分析 可以得出 要求選出一些飯菜 時消費量盡量接近total 5元 然後再買乙個飯菜 以達到透支。可以證明 最後買的那個飯菜是飯菜中價值最大的.證明設a1 a2 a3.an 1 an 為各飯菜的 設an的 最大 設sum total 5 a1 a2 a3 an 2 an...

DP 揹包 hdu2546 飯卡

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