電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)。所以大家都希望盡量使卡上的餘額最少。
某天,食堂中有n種菜**,每種菜可購買一次。已知每種菜的**以及卡上的餘額,問最少可使卡上的餘額為多少。
input
多組資料。對於每組資料:
第一行為正整數n,表示菜的數量。n<=1000。
第二行包括n個正整數,表示每種菜的**。**不超過50。
第三行包括乙個正整數m,表示卡上的餘額。m<=1000。
n=0表示資料結束。
output
對於每組輸入,輸出一行,包含乙個整數,表示卡上可能的最小餘額。
sample input
1505
101 2 3 2 1 1 2 3 2 1
500
sample output
-45
32
可以先找到最貴的菜,在錢最少的時候再買
**
#include#include#include#define n 1005
using namespace std;
int w[n],v[n];
int dp[n][n];
bool aaa(int a,int b)
int main()
for(i=2;i<=n;i++)
printf
("%d\n",m-dp[n][maxv]-maxx);}
}
01揹包變形
傳送門 現有n個物品,序號分別為1,2,n。對於每個i 1 i n 物品i有乙個體積wi和乙個價值vi。小明想在這n個物品中選取一些放到揹包裡帶回家。已知揹包的容積為w,這意味著所帶物品的總體積不能超過w。求出小明可以帶回家的物品總價值可能的最大值。constraints input 標準輸入格式如...
01揹包問題變形
一 問題 二 解題思路 三 c 下面是我自己理解寫的,沒有根據標準答案的,那答案在講啥?一直沒法ac,不過還是可以解決問題的。n件物品按單位重量價值降序排序,然後回溯法裝,右結點必要時剪枝,剛好湊成重量為m的若干件物品才能得到乙個解。include define max 50 using names...
0 1揹包變形題
將乙個陣列分成兩部分,不要求兩部分所包含的元素個數相等,要求使得這兩個部分的和的差值最小。比如對於陣列,可以分成和,使得這兩部分的差值最小。這道題為什麼說是0 1揹包問題的變形呢,因為0 1揹包問題是每個蘋果裝或者不裝,使得能裝的總重量最重,這道題也類似,什麼時候兩個陣列的和的差值最小呢?當然是都為...