HDU 最大报销额 (0 1 背包)
生活随笔
收集整理的這篇文章主要介紹了
HDU 最大报销额 (0 1 背包)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最大報(bào)銷額
Time Limit : 1000/1000ms (Java/Other)???Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 29???Accepted Submission(s) : 11
Problem Description 現(xiàn)有一筆經(jīng)費(fèi)可以報(bào)銷一定額度的發(fā)票。允許報(bào)銷的發(fā)票類型包括買圖書(A類)、文具(B類)、差旅(C類),要求每張發(fā)票的總額不得超過1000元,每張發(fā)票上,單項(xiàng)物品的價(jià)值不得超過600元。現(xiàn)請(qǐng)你編寫程序,在給出的一堆發(fā)票中找出可以報(bào)銷的、不超過給定額度的最大報(bào)銷額。?
Input 測(cè)試輸入包含若干測(cè)試用例。每個(gè)測(cè)試用例的第1行包含兩個(gè)正數(shù) Q 和 N,其中 Q 是給定的報(bào)銷額度,N(<=30)是發(fā)票張數(shù)。隨后是 N 行輸入,每行的格式為: m Type_1:price_1 Type_2:price_2 ... Type_m:price_m 其中正整數(shù) m 是這張發(fā)票上所開物品的件數(shù),Type_i 和 price_i 是第 i 項(xiàng)物品的種類和價(jià)值。物品種類用一個(gè)大寫英文字母表示。當(dāng)N為0時(shí),全部輸入結(jié)束,相應(yīng)的結(jié)果不要輸出。?
Output 對(duì)每個(gè)測(cè)試用例輸出1行,即可以報(bào)銷的最大數(shù)額,精確到小數(shù)點(diǎn)后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?
Source 浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2007年 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm>using namespace std;double dp[40],money[40];int main(){//freopen("input.txt","r",stdin);double Q,a,b,c;int n;while(~scanf("%lf%d",&Q,&n) && n){memset(money,0,sizeof(money));int cnt=0,k;char ch;double num;for(int i=0;i<n;i++){scanf("%d",&k);int flag=1;a=b=c=0;for(int j=0;j<k;j++){getchar();scanf("%c:%lf",&ch,&num);if(num>600)flag=0;if(flag){if(ch=='A')a+=num;else if(ch=='B')b+=num;else if(ch=='C')c+=num;elseflag=0;}}if(flag && a<=600 && b<=600 && c<=600 && (a+b+c)<=1000){money[cnt++]=a+b+c;}}memset(dp,0,sizeof(dp));for(int i=0;i<cnt;i++)for(int j=cnt;j>=1;j--)if((dp[j-1]+money[i]<=Q)) //改成這樣可優(yōu)化時(shí)間 if(j==1 || (dp[j-1]>0 && dp[j-1]+money[i]<=Q))dp[j]=max(dp[j],dp[j-1]+money[i]);double ans=0;for(int i=0;i<=cnt;i++)if(ans<dp[i])ans=dp[i];printf("%.2lf\n",ans);}return 0; }?
?
總結(jié)
以上是生活随笔為你收集整理的HDU 最大报销额 (0 1 背包)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PowerShell入门(三):如何快速
- 下一篇: flex 添加右键链接