hdu-1864 最大报销额
Posted 黄小鱼ZZZ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu-1864 最大报销额相关的知识,希望对你有一定的参考价值。
简单的背包题 ;好无奈,我又没做出来在考试的时候
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
double dp[60],money[60];
double total;
int num,i,j,n,k,t;
double max(double a,double b)
return a>b?a:b;
int main()
int flag,temp;
char ch;
double A,B,C,m;
while(~scanf("%lf %d",&total,&num),num)
temp=0;
memset(dp,0,sizeof(dp));
memset(money,0,sizeof(money));
for(i=1;i<=num;i++)
A=0; B=0; C=0;
flag=1;
scanf("%d",&n);
for(j=0;j<n;j++)
scanf(" %c:%lf",&ch,&m);
// printf("%c:%.2lf\\n",ch,m);
if(ch!='A'&&ch!='B'&&ch!='C'||m>600)
flag=0;
break;
if(ch=='A')
A+=m;
else if(ch=='B')
B+=m;
else if(ch=='C')
C+=m;
if(flag && A<=600 && B<=600 && C<=600 && A+B+C<=1000)
money[temp++]=A+B+C;
// printf("%.2lf ",A+B+C)
// printf("%.2lf ",money[temp-1]);
for(i=0;i<=temp;i++)
for(j=temp;j>=1;j--)
if(j==1 || dp[j-1]>0 && dp[j-1]+money[i]<=total)
dp[j]=max(dp[j],dp[j-1]+money[i]);
int sum=0;
for(i=1;i<=temp;i++)
if(dp[sum]<dp[i])
sum=i;
printf("%.2lf\\n",dp[sum]);
return 0;
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1864
以上是关于hdu-1864 最大报销额的主要内容,如果未能解决你的问题,请参考以下文章