hdu-2546飯卡(01揹包)
飯卡
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 15886 Accepted Submission(s): 5505
Problem Description電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)。所以大家都希望儘量使卡上的餘額最少。
某天,食堂中有n種菜出售,每種菜可購買一次。已知每種菜的價格以及卡上的餘額,問最少可使卡上的餘額為多少。
Input多組資料。對於每組資料:
第一行為正整數n,表示菜的數量。n<=1000。
第二行包括n個正整數,表示每種菜的價格。價格不超過50。
第三行包括一個正整數m,表示卡上的餘額。m<=1000。
n=0表示資料結束。
Output對於每組輸入,輸出一行,包含一個整數,表示卡上可能的最小余額。
Sample Input1 50 5 10 1 2 3 2 1 1 2 3 2 1 50 0
Sample Output-45 32
01揹包問題,首先拿出5元買最貴的東西,那接下來就是揹包容量m-5,物品數量n-1 的01揹包問題了。
狀態轉移方程為:f[j]=max(f[j],f[j-price[i]]+price[i]) , f[j]表示買前i件物品,預算為j時的最大花銷
為了好弄,我把最貴的移到陣列尾部。
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int cmp(int a,int b){
return a<b;
}
int main(int argc, char *argv[])
{
int n,V,dp[1111];
int v[1111],price[1111];
while(cin>>n){
if(n==0) break;
int i,j;
for(i=0;i<n;i++) cin>>v[i];
cin>>V;
if(V<5) {
cout<<V<<endl;
continue;
}
int ma=0,num;
sort(v,v+n,cmp);
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++) price[i]=v[i];
V-=5;
for(i=0;i<n-1;i++){
for(j=V;j-v[i]>=0;j--){
if(dp[j]<dp[j-v[i]]+price[i]) dp[j]=dp[j-v[i]]+price[i];
}
}
cout<<V+5-dp[V]-price[n-1]<<endl;
}
return 0;
}
相關推薦
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揹包)
Description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購
HDU 2546 飯卡……(01揹包+條件)
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int
hdu 2546 飯卡(01揹包+貪心)
題目分析:要想使剩餘額最小,就要在就要用V=m-5的錢去買最多的菜,再用剩下的5元買最貴的菜; 先對菜價按升序排序,再用V買前i-1件 物品, #include<iostream> #include<cstdio> #include<algo
2546 飯卡(01揹包)
演算法:01揹包DP 難度:NOIP--- 先把最貴的一種菜找到不用,用剩餘金額減5的金錢去儘可能買 除掉最貴的菜後剩餘的菜類, 最後再用餘下的錢去買最貴的菜 注意:要特判m<5的
hdu 2546 飯卡(01揹包+貪心)
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 25615 Accepted Submi
杭電 2546 飯卡(01揹包)
電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)。所以大家都希望儘量使卡上的餘額最少。 某天,食堂中有n種菜出售,每種菜可購買一次。已知每種菜的價格以及卡上的餘額,問最
HDU 2546:飯卡(01揹包)
飯卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 41634 Accepted Submission(
題解報告:hdu 2546 飯卡(01背包)
set div input 解題思路 結束 hdu 2546 代碼 sizeof 以及 Problem Description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷余額。如果購買一個商品之前,卡上的剩余金額大於或等於5元,就一定可以購買成功(即使購買後
2546 飯卡(01揹包,挺好的)
題目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2546 思路:剛開始直接把揹包的容量搞為m-5+max1(max1的值為最貴的菜的價格),因為他最多的能花這麼多,結果錯了,應該把最大的單獨提出來,用5塊來買,剩下的錢做揹包 A
飯卡 (01揹包)
電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)。所以大家都希望儘量使卡上的餘額最少。 某天,食堂中有n種菜出售,每種菜可購買一次。已知每種菜的價格以
hdu2546:飯卡(01揹包)
http://acm.hdu.edu.cn/showproblem.php?pid=2546 Problem Description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額
HDU 2546飯卡 【01揹包水題】
先上題 Problem Description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡
hdu_2546_飯卡(01揹包)
電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)。所以大家都希望儘量使卡上的餘額最少。 某天,食堂中有n種菜出售,每
hdu 2546 飯卡(貪心+01揹包)
飯卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi
HDU 2602 Bone Collector(01揹包)
Bone Collector Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , s
HDU 2602 - Bone Collector(01揹包)
題目連結 http://acm.hdu.edu.cn/showproblem.php?pid=2602 【思路】 01揹包問題 #include<bits/stdc++.h> using namespace std; const int maxn=1005; int
hdoj 2546 飯卡 【01揹包】
飯卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16638 Accepted Submission(