先上**
挺簡單的一道題,01揹包的變形。餘額最少不就是要花掉的錢最多嘛,假如沒有5塊錢這個條件,那麼其實就是在給定餘額(揹包容量)下選擇一些菜(物品)消耗餘額(放進揹包),讓菜的總價(物品總價值)最大,同時菜的總價(物品總重量)不超過餘額。#include #include #include #include using namespace std;
int n, m, dp[1060], val[1005];
int main()
}for (int i=0; i<=m+45; i++)
printf("%d\n", m-mx);
}return 0;}/*
101 2 3 2 1 1 2 3 2 1
10*/
嗯這題裡菜的**既是物品價值又是重量。
然後說5塊錢以下不讓消費(流下了貧窮的淚水)這個條件也好辦,等於揹包容量-5。
然後又說超過5塊可以買超過飯卡餘額的菜品(sorry~有錢是真的可以為所欲為的~)。怎麼辦呢,反正食品價不超過50,所以最後總價最多也就是餘額加上50。再抵掉前面的5塊,最後相當於給揹包容量加上45。
這樣就可以快落地當成揹包問題做啦,只不過在狀態轉移
dp[j]=max(dp[j], dp[j-x]+x);
的時候需要在前面加上乙個判斷條件
if (dp[j-x]<=m-5)
其意義是判斷在加上這件物品前是不是餘額已經小於5了。 hdu2546 飯卡(01揹包 dp)
problem description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功 即使購買後卡上餘額為負 否則無法購買 即使金額足夠 所以大家都希望盡量使卡上的餘額最少。某天,食堂中有n種菜 每種菜可購買一...
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...