最大報銷額 HDU 1864 01揹包

2021-08-11 13:11:57 字數 1372 閱讀 4768

現有一筆經費可以報銷一定額度的發票。允許報銷的發票型別包括買圖書(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

詳細解釋

code:

#include #include #include using namespace std;

const int maxn = 1000*30*100+5;//30張1000元發票,再擴大100倍

int max_val;//可報銷的總額

int dp[maxn];

int cnt;//合法的發票數

int val[maxn]; //記錄每張合法發票的總額

int main()

if(flag && va <= 600 && vb <= 600 && vc <= 600 && va+vb+vc <= 1000)

} //選出合法的之後,進行01揹包

memset(dp,0,sizeof(dp));

for(i = 1; i <= cnt; i++)

} printf("%.2f\n",(double)dp[max_val]/100.0);

} return 0;

}

最大報銷額 hdu

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

最大報銷額 揹包

最大報銷額 原題鏈結 本題難度主要在於資料的選擇 之後就是01揹包的問題 同時由於題目要求保留兩位小數 所以我們需要將資料100來計算,由於會100所以要注意dp陣列的大小。以保證小數字的精確 最後要注意double 的輸出 include include include include inclu...

最大報銷額

本題要看清題目,弄清楚題目的意思,也考了理解題目意思的能力。題目要求是發票要滿足條件才可以報銷,發票上不能含有別類東西,而且每類的 相加不能超過600,所有類相加不能超過一千,所以要用if來判斷發票是否滿足條件用1,0表示。程式的結束也要注意一下。include include include us...