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 最大报销额的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1864 最大报销额 0-1背包

Hdu 1864 最大报销额

hdu 1864 最大报销额01背包

hdu 1864 最大报销额(背包)

HDU - 1864 最大报销额 (01背包)

hdu1864-最大报销额