HDU 2546飯卡 【01揹包水題】
先上題
Problem Description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)。所以大家都希望儘量使卡上的餘額最少。某天,食堂中有n種菜出售,每種菜可購買一次。已知每種菜的價格以及卡上的餘額,問最少可使卡上的餘額為多少。
Input 多組資料。對於每組資料:
第一行為正整數n,表示菜的數量。n<=1000。
第二行包括n個正整數,表示每種菜的價格。價格不超過50。
第三行包括一個正整數m,表示卡上的餘額。m<=1000。
n=0表示資料結束。
此題的關鍵在於要使剩下5元去買到最貴的菜,則使m-=5,之後就是01揹包的裸題了
#include<iostream> using namespace std; #include<algorithm> int main() { int n; while (scanf("%d", &n) != EOF, n) { int price[1010] = { 0 }; int dp[1010] = { 0 }; for (int i = 1; i <= n; i++) { scanf("%d", &price[i]); } int m; scanf("%d", &m); if (m < 5) { cout << m << endl; continue; } sort(price + 1, price + 1 + n); int Maxn = price[n]; m -= 5; for (int i = 1; i < n; i++) { for (int j = m; j >= price[i]; j--) { dp[j] = max(dp[j], dp[j - price[i]] + price[i]); } } cout << m + 5 - dp[m] - Maxn << endl; } return 0; }
相關推薦
HDU 2546飯卡 【01揹包水題】
先上題 Problem Description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡
HDU 2546 飯卡( 01揹包 )
這是一道簡單的01揹包 題意:給你N種菜的價錢,給你一個初始的錢數,問你做多能花費多少 但是注意一個條件,當身上的錢>=5時,可以購買任何價錢的菜,如果<5則不能購買任何價錢的菜
hdu-2546飯卡(01揹包)
飯卡Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission
HDU 2546 飯卡 (01揹包)
題意分析:01揹包 AC_CODE int n; int v[1002] , money; int dp[1002]; int main() { while(cin >> n && n) { int i , j
hdu 2546 飯卡(01揹包+貪心)
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 25615 Accepted Submi
HDU 2546 飯卡……(01揹包+條件)
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int
HDU 2546 飯卡(01揹包)
Description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購
hdoj 2546 飯卡 【01揹包】
飯卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16638 Accepted Submission(
hdu 2546 飯卡(01揹包+貪心)
題目分析:要想使剩餘額最小,就要在就要用V=m-5的錢去買最多的菜,再用剩下的5元買最貴的菜; 先對菜價按升序排序,再用V買前i-1件 物品, #include<iostream> #include<cstdio> #include<algo
題解報告:hdu 2546 飯卡(01背包)
set div input 解題思路 結束 hdu 2546 代碼 sizeof 以及 Problem Description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷余額。如果購買一個商品之前,卡上的剩余金額大於或等於5元,就一定可以購買成功(即使購買後
2546 飯卡(01揹包)
演算法:01揹包DP 難度:NOIP--- 先把最貴的一種菜找到不用,用剩餘金額減5的金錢去儘可能買 除掉最貴的菜後剩餘的菜類, 最後再用餘下的錢去買最貴的菜 注意:要特判m<5的
2546 飯卡(01揹包,挺好的)
題目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2546 思路:剛開始直接把揹包的容量搞為m-5+max1(max1的值為最貴的菜的價格),因為他最多的能花這麼多,結果錯了,應該把最大的單獨提出來,用5塊來買,剩下的錢做揹包 A
杭電 2546 飯卡(01揹包)
電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)。所以大家都希望儘量使卡上的餘額最少。 某天,食堂中有n種菜出售,每種菜可購買一次。已知每種菜的價格以及卡上的餘額,問最
hdu 2546 飯卡 動態規劃 01揹包
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm&
HDU 2546 飯卡 01揹包
題意:電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)。所以大家都希望儘量使卡上的餘額最少。 某天,食堂中有n種菜出售,每種菜可購
HDU 2546 飯卡 01揹包變形
飯卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 22799 Accepted Submiss
HDU 2546:飯卡(01揹包)
飯卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 41634 Accepted Submission(
01揹包-hdu 2546 飯卡
思路: 把最大的那個值去掉,拿剩下的5元錢去買。 注意m<5的時候直接輸出。坑死了 #include <iostream> #include <stdio.h> #inc
hdu 2546 飯卡(貪心+01揹包)
飯卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi
HDU 2546飯卡(DP—揹包問題)
飯卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S