HDU 1864 最大報銷額

2021-08-04 21:58:25 字數 1285 閱讀 5636

現有一筆經費可以報銷一定額度的發票。允許報銷的發票型別包括買圖書(a類)、文具(b類)、差旅(c類),要求每張發票的總額不得超過1000元,每張發票上,單項物品的價值不得超過600元。現請你編寫程式,在給出的一堆發票中找出可以報銷的、不超過給定額度的最大報銷額。

input

測試輸入包含若干測試用例。每個測試用例的第1行包含兩個正數 q 和 n,其中 q 是給定的報銷額度,n(<=30)是發票張數。隨後是 n 行輸入,每行的格式為:

m type_1:price_1 type_2:price_2 ... type_m:price_m

其中正整數 m 是這張發票上所開物品的件數,type_i 和 price_i 是第 i 項物品的種類和價值。物品種類用乙個大寫英文本母表示。當n為0時,全部輸入結束,相應的結果不要輸出。

output

對每個測試用例輸出1行,即可以報銷的最大數額,精確到小數點後2位。

sample input

200.00 3

2 a:23.50 b:100.00

1 c:650.00

3 a:59.99 a:120.00 x:10.00

1200.00 2

2 b:600.00 a:400.00

1 c:200.50

1200.50 3

2 b:600.00 a:400.00

1 c:200.50

1 a:100.00

100.00 0

sample output

123.50

1000.00

1200.50

中文題就不解釋意思了哈,但是總感覺此題有坑,單項物品的**不是指一張發票中的乙個,而是每張發票中一類物品的總和不能超過600,在這wa了好幾次,只能說中國文化博大精深啊。

題解0-1揹包問題,但需注意本題處理的物件的是每一張發票的和,看**。

#include#include#includeusing namespace std;

double dp[3000050],m;

int n,v[1500],book[1500],sum;

int main()

q=m*100; //強制轉換為整型,因為dp是double型,裡面的錢數不能再是double型,否則會執行錯誤

for(i=0; i=v[i]; j--)

}printf("%.2lf\n",dp[q]/100); //一開始乘了100,現在除100

}return 0;

}

HDU 1864 最大報銷額

這個題是乙個揹包題,要求求出能夠報賬的最大金額 思路 把每張發票的報賬總額算出來,然後跑一次01揹包即可 注意 1 如果發票中含有a b c以外的專案,則不可以報賬 2 發票中可能含有多個a專案,判斷超總額的時候需先累加 3 對小數的處理可以先乘以100 include include includ...

HDU 1864 最大報銷額

最大報銷額 time limit 1000ms memory limit 32768kb 64bit io format i64d i64u submit status description 現有一筆經費可以報銷一定額度的發票。允許報銷的發票型別包括買圖書 a類 文具 b類 差旅 c類 要求每張發...

hdu 1864 最大報銷額

problem description 現有一筆經費可以報銷一定額度的發票。允許報銷的發票型別包括買圖書 a類 文具 b類 差旅 c類 要求每張發票的總額不得超過1000元,每張發票上,單項物品的價值不得超過600元。現請你編寫程式,在給出的一堆發票中找出可以報銷的 不超過給定額度的最大報銷額。in...