hdu 最大报销额(01背包)
2010-08-10 19:17
183 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1864
解题思路:将报销上限设为背包容量,可报销的发票的金额扩大100倍作为价值做01背包问题求解。
解题思路:将报销上限设为背包容量,可报销的发票的金额扩大100倍作为价值做01背包问题求解。
#include <stdio.h> #include <string.h> #define max(a,b) a>b?a:b int dp[3000010]; int main() { int N,i,j,m,flag,len; double Q,val; int w[35]; int ww[3]; char ch; while (scanf("%lf%d",&Q,&N)!=EOF&&N) { memset(dp,0,sizeof(dp)); len = 0; for (i=0;i<N;i++) { scanf("%d%*c",&m); flag = 1; for(j=0;j<3;j++) ww[j] = 0; j = 0; while (m--) { scanf("%c:%lf%*c",&ch,&val); if(ch>='A'&&ch<='C') { j = ch-'A'; ww[j]+=(int)(val*100);/*强转为整型,小数变整数*/ } /*不可报销条件*/ if(ww[j]>60000||ww[0]+ww[1]+ww[2]>100000||ch!='A'&&ch!='B'&&ch!='C') flag = 0; } if (flag) w[len++] = ww[0]+ww[1]+ww[2]; } for (i=0;i<len;i++) { for (j=(int)(Q*100);j>=w[i];j--) dp[j] = max(dp[j],dp[j-w[i]]+w[i]); } printf("%.2lf/n",(double)(dp[(int)(Q*100)]/100.0)); } return 0; }
相关文章推荐
- HDU 1864 最大报销额(01背包)
- HDU 1864 最大报销额(dfs和01背包都可以)
- HDU - 1864 最大报销额(01背包)
- HDU 1864 最大报销额(01背包问题)
- HDU 1861 最大报销额 01背包
- HDU 1864 最大报销额(01背包)
- HDU 1864 最大报销额 01背包
- HDU 1864 最大报销额……( 01背包 + 各种条件)
- hdu 1864(最大报销额)——01背包
- HDU-1864-最大报销额【01背包】
- HDU 1864 最大报销额 【01背包】
- hdu 1864 最大报销额(小数变整数,01背包)
- [ACM] hdu 1864 最大报销额(01背包或贪心)
- hdu1864最大报销额度(01背包)- 把小数化整数技巧
- hdu 1864 最大报销额(01背包)
- HDU 1864 最大报销额(01背包)
- 【HDU - 1864 】最大报销额 【01背包】
- HDU 1864 最大报销额(基础01背包)
- [ACM] hdu 1864 最大报销额(01背包或贪心)
- HDU ~ 1864 ~ 最大报销额(01背包)