HDU1864报销发票
来源:互联网 发布:数控车床编程教学视频 编辑:程序博客网 时间:2024/04/29 08:43
//01背包,因为保留两位小数,所以以报销的最大额乘以100作为背包
#include<stdio.h>
#include<string.h>
int dp[3000005];
int main()
{
int i,j,k,n,m,Q;
int v[35];
char c;
double q,s;
while(scanf("%lf%d",&q,&n),n)
{
memset(dp,0,sizeof(dp));
int cnt=0;
for(i=0;i<n;i++)
{
scanf("%d",&m);
getchar();
int flag=1;
int A=0,B=0,C=0;
for(j=0;j<m;j++)
{
scanf("%c:%lf",&c,&s);
getchar();
// printf("%c %lf\n",c,s);
if(c=='A') A=A+(int)(s*100);
else if(c=='B') B=B+(int)(s*100);
else if(c=='C') C=C+(int)(s*100);
else flag=0;
if(A+B+C>100000||A>60000||B>60000||C>60000) flag=0;
}
if(flag)v[cnt++]=A+B+C;
}
Q=(int)(q*100);
for(i=0;i<cnt;i++)
for(j=Q;j>=v[i];j--)
dp[j]=dp[j]>dp[j-v[i]]+v[i]?dp[j]:dp[j-v[i]]+v[i];
printf("%.2lf\n",(double)dp[Q]/100);
}
return 0;
}
#include<stdio.h>
#include<string.h>
int dp[3000005];
int main()
{
int i,j,k,n,m,Q;
int v[35];
char c;
double q,s;
while(scanf("%lf%d",&q,&n),n)
{
memset(dp,0,sizeof(dp));
int cnt=0;
for(i=0;i<n;i++)
{
scanf("%d",&m);
getchar();
int flag=1;
int A=0,B=0,C=0;
for(j=0;j<m;j++)
{
scanf("%c:%lf",&c,&s);
getchar();
// printf("%c %lf\n",c,s);
if(c=='A') A=A+(int)(s*100);
else if(c=='B') B=B+(int)(s*100);
else if(c=='C') C=C+(int)(s*100);
else flag=0;
if(A+B+C>100000||A>60000||B>60000||C>60000) flag=0;
}
if(flag)v[cnt++]=A+B+C;
}
Q=(int)(q*100);
for(i=0;i<cnt;i++)
for(j=Q;j>=v[i];j--)
dp[j]=dp[j]>dp[j-v[i]]+v[i]?dp[j]:dp[j-v[i]]+v[i];
printf("%.2lf\n",(double)dp[Q]/100);
}
return 0;
}
- HDU1864报销发票
- hdu1864最大报销 dfs
- hdu1864 最大报销额
- hdu1864最大报销额
- hdu1864 最大报销额
- hdu1864 最大报销额
- HDU1864----最大报销额
- hdu1864 最大报销额
- hdu1864 最大报销额
- hdu1864 最大报销额
- hdu1864最大报销额
- HDU1864 最大报销额
- HDU1864最大报销额
- HDU1864:最大报销额
- hdu1864 最大报销额
- hdu1864 — 最大报销额
- 【DP(背包)】 hdu1864 最大报销额
- 最大报销额 hdu1864 01背包
- HDU 1013 Digital Roots
- HDU1171
- 3.3 小结
- hdu 2866 Special Prime
- 【js学习笔记-012】---全局对象
- HDU1864报销发票
- 组网基础之深入解析二层组播
- MySQL数据类型
- ibatis使用存储过程的时候发现了点问题
- opencv图像分割
- UVA 10098 (13.07.18)
- HDU2955
- 买债券之完全背包
- hdu2514 Another Eight Puzzle (全排列、暴力)