飯卡 HDU - 2546(0 1背 包)
電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)。所以大家都希望儘量使卡上的餘額最少。
某天,食堂中有n種菜出售,每種菜可購買一次。已知每種菜的價格以及卡上的餘額,問最少可使卡上的餘額為多少。
Input
多組資料。對於每組資料:
第一行為正整數n,表示菜的數量。n<=1000。
第二行包括n個正整數,表示每種菜的價格。價格不超過50。
第三行包括一個正整數m,表示卡上的餘額。m<=1000。
n=0表示資料結束。
Output
對於每組輸入,輸出一行,包含一個整數,表示卡上可能的最小余額。
Sample Input
1
50
5
10
1 2 3 2 1 1 2 3 2 1
50
0
Sample Output
-45
32
題意:
儘可能的花多的錢,但有限制條件(購買菜之前卡里餘額要大於等於5)
即使最後購買過之後卡里餘額為負,也是可以的。
思路:
分兩種情況
第一種:剛開始卡里的餘額不足5元,不可以購買菜,直接輸出卡內餘額即可
第二種:卡里餘額大於等於5元,可以自行選擇購買菜,然後我們要先對菜的價格從小到大排序,把最貴的菜留到最後在買(所以一定要預留5元,保證一定可以買這個最貴的菜),然後先用剩下的m-5元進行購買,當購買之後剩餘的錢不夠5元時,加上之前預留的5元把最貴的菜買了,此時即是最大的花費,卡上的最小余額。
程式碼:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int p[1010],dp[1010];
int main()
{
int n,m,i,j;
while(~scanf("%d",&n)&&n)
{
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
scanf("%d",&p[i]);
scanf("%d",&m);
sort(p+1,p+n+1);
if(m<5)
printf("%d\n",m);
else
{
for(i=1;i<n;i++) //下標是從1開始的,沒有等於n是預留那個最貴的菜
{
for(j=m-5;j>=p[i];j--) //首先j-5預留5元,當j大於菜品價格時,說明可以購買
{
dp[j]=max(dp[j],dp[j-p[i]]+p[i]);
}
}
printf("%d\n",m-dp[m-5]-p[n]);//最後輸出要減去最貴的菜品價格
}
}
return 0;
}
相關文章
- 簡單的揹包問題(入門)HDU2602 HDU2546 HDU1864
- 整數0-1揹包問題
- Ubuntu飯卡系統Rockchip連結Ubuntu
- 【演算法】0-1揹包問題演算法
- leetcode題解(0-1揹包問題)LeetCode
- hdu3591The trouble of Xiaoqian 多重揹包+全然揹包
- 從0到1構建策略卡牌養成框架框架
- 0-1揹包問題(動態規劃)動態規劃
- NYOJ 1426-大賣場購物車1【0-1揹包】
- TYVJ 1096 數字組合【0-1揹包模型】模型
- 動態規劃之0,1揹包問題動態規劃
- 動態規劃解0-1揹包問題動態規劃
- 窮舉法解決0/1揹包問題——pythonPython
- HDU Piggy-Bank(完全揹包問題)
- HDU - 1114 Piggy-Bank(完全揹包板題)
- 烏卡時代的雲成本管理:從0到1瞭解FinOps
- 動態規劃之 0-1 揹包問題詳解動態規劃
- 【動態規劃】0-1揹包問題原理和實現動態規劃
- 位元組面試演算法題-0,1揹包問題面試演算法
- SlZORk9SMkRMSVpUR1VDQ0tWTUZDTVNNSkZHVU1WS0hJTk5GSVRLTklaS0ZRTVI1SFU2UQ==VR
- HDU - 2191 珍惜現在,感恩生活(多重揹包板題)
- Hdu2191珍惜現在,感恩生活(多重揹包,模板)
- hdu6007 Mr. Panda and Crystal (最短路+完全揹包)
- 阿里:千億交易背後的0故障釋出阿里
- 高仿包和1:1包區別
- CVE-2015-2546:從補丁比對到Exploit
- hdu 2111 Saving HDU (DP)
- 解讀銀行卡支付背後的原理
- 銀行卡包|四件套銀行卡
- 日常0x1
- PHash從0到1
- PPO演算法動作機率出現[0,0,0,0,0,1]的問題演算法
- “飯堂集合,遊戲結束!”——《Goose Goose Duck》關卡設計簡談遊戲Go
- [譯] Flutter 從 0 到 1Flutter
- 0和1的熟練
- 如何做好一款重製遊戲:「炒冷飯」背後的那些事兒遊戲
- 卡普空終於不再“炒冷飯” 已在申請註冊新商標
- Shape of HDU