hdu1864 最大报销额

来源:互联网 发布:电视盒子软件破解会员 编辑:程序博客网 时间:2024/06/02 15:46

hdu1864


题解  友情链接~


同一个方法做的

#include<iostream>#include<cstdio>using namespace std;int N;double V,dp[40],p[40],MAX,sum[40];bool flag[40];void dfs(double x,int k){if(x>V)return ;if(x>MAX)MAX=x;if(k>N)return ;if(x+sum[k]<=MAX)return;//printf("%.2lf\n",x);//flag[k]=1;dfs(x+p[k],k+1);//flag[k]=0;dfs(x,k+1);}int main(){int i,j,k,n;while(scanf("%lf%d",&V,&n),n){int num,flag;double A,B,C,tmp,tsum;char ch;N=0;for(i=1;i<=n;i++){flag=1;tsum=0;A=B=C=0;scanf("%d",&num);for(j=1;j<=num;j++){getchar();scanf("%c:%lf",&ch,&tmp);tsum+=tmp;if(ch=='A')A+=tmp;elseif(ch=='B')B+=tmp;elseif(ch=='C')C+=tmp;elseflag=0;}if(tsum>1000||A>600||B>600||C>600)flag=0;if(flag)p[++N]=tsum;}//for(i=1;i<=N;i++)printf("%.2lf ",p[i]);printf("\n\n");sum[N]=p[N];for(i=N-1;i>=1;i--){sum[i]=sum[i+1]+p[i];}memset(dp,0,sizeof(dp));MAX=0;dfs(0,1);printf("%.2lf\n",MAX);}return 0;}


原创粉丝点击