HDU 1684 最大報銷額

2021-06-08 15:13:53 字數 1490 閱讀 2684

problem description

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

0—1揹包,把每張發票當乙個物品, 其中,發票中有單項大於600的或者總額大於1000的,這張發票扔掉不要,也就是不加入物品的行列。整理出每張發票的總額,作為這件物品的價值也作為容量(相當於物品的體積),放到容量為q的揹包中,這就是標準的0—1揹包了;

轉移方程:f[j]=max(f[j],f[j-1]+v[i]);

**:

#include #include int max(int a,int b)

int dp[3000010];

int main()

/*不可報銷條件*/

if(w1[j]>60000||w1[0]+w1[1]+w1[2]>100000||ch!='a'&&ch!='b'&&ch!='c')

flag = 0;

}if (flag)

w[len++] = w1[0]+w1[1]+w1[2];

} for (i=0;i=w[i];j--)

dp[j] = max(dp[j],dp[j-w[i]]+w[i]);

} printf("%.2lf\n",(double)(dp[(int)(q*100)]/100.0));

} return 0;

}

最大報銷額 hdu

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

最大報銷額

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

最大報銷額

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