開始寫成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種菜 每種菜可購買一...