[HDU]1864最大报销额[dp][贪心?怎么可能!]
2015-05-19 15:23
363 查看
题目链接:[HDU]1864最大报销额[dp]or[贪心?怎么可能!]
题意分析:题意就不再分析了。需要注意的事,题目中有一句『单项物品的价值不得超过600元』等价于『单类物品总价值不超过600元』。刚开始还以为是单个物品Orz。
解题思路:这次最大报销额是一个浮点数,单纯的整数背包就不起作用了。可以考虑使用乘100后变为整数的方法,进行01背包求解。
(网上流传的两种方法:一种DP:转移方程:f[j]=max(f[j],f[j-1]+v[i]);另一种:贪心法;都是错误的!!!!!!)
补充下数据证明:(欢迎使用上两种方法中任意一种测试!)
具体代码如下: Made by Gameparkwing
直接转载一发
题意分析:题意就不再分析了。需要注意的事,题目中有一句『单项物品的价值不得超过600元』等价于『单类物品总价值不超过600元』。刚开始还以为是单个物品Orz。
解题思路:这次最大报销额是一个浮点数,单纯的整数背包就不起作用了。可以考虑使用乘100后变为整数的方法,进行01背包求解。
(网上流传的两种方法:一种DP:转移方程:f[j]=max(f[j],f[j-1]+v[i]);另一种:贪心法;都是错误的!!!!!!)
补充下数据证明:(欢迎使用上两种方法中任意一种测试!)
1000 3 1 C:400 2 A:200 A:400 1 A:500 999 3 1 A:500 2 A:200 A:400 1 C:400 100 5 1 A:50 1 A:40 1 A:5 1 A:110 1 A:220 1000 900 95 |
直接转载一发
注意: 1.数组至少要开到3000050; 2.是单类物品不能超过600元,不是单项,如A:310 A:320,那A类物品为630元,不符合要求,不能报销; 3.用scanf()读入的话,要先读掉类型字符前的一个空格。 AC代码: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> int dp[3000100]; int MyMax(int a,int b) { return (a>b?a:b); } int main() { int n,m,top; double q; while((scanf("%lf%d",&q,&n)!=EOF)&&(n!=0)) { char type; double price; int i,j,x,a,b,c,tag,top; int money[35]; top=(int)(q*100); memset(dp,0,sizeof(dp)); memset(money,0,sizeof(money)); for(i=1;i<=n;i++) { a=b=c=tag=0; scanf("%d",&m); for(j=1;j<=m;j++) { scanf("%*c%c:%lf",&type,&price); x=(int)(price*100); if(type=='A') { a+=x; } else if(type=='B') { b+=x; } else if(type=='C') { c+=x; } else { tag=1; } } if(tag!=1&&a+b+c<=100000&&a<=60000&&b<=60000&&c<=60000) { money[i]=a+b+c; } else { money[i]=top+1; } } memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) { for(j=top;j>=money[i];j--) { dp[j]=MyMax(dp[j],dp[j-money[i]]+money[i]); } } printf("%.2lf\n",dp[top]/100.0); } return (0); }
相关文章推荐
- HDU 1864 最大报销额 (DP-01背包问题)
- hdu 1864-最大报销额-贪心
- [HDU 1864 最大报销额] 入门DP
- [ACM] hdu 1864 最大报销额(01背包或贪心)
- [ACM] hdu 1864 最大报销额(01背包或贪心)
- HDU-1864 最大报销额 DP
- HDU 1864 最大报销额(DP,01背包)
- HDU 1864 最大报销额 (dp 01背包)
- [ACM] hdu 1864 最大报销额(01背包或贪心)
- Hdu 1864 最大报销额(DP)
- hdu 1864 最大报销额 dp
- hdu 1864 最大报销额(dp)
- hdu 1864 最大报销额(dp/背包)
- hdu1864最大报销额(dp)
- hdu 1864 dp (0,1背包) 最大报销额
- 最大报销额 (HDU 1864)解题报告(DP - 01 - 背包)
- 【DP|01背包】HDU-1864 最大报销额
- HDOJ(HDU).1864 最大报销额 (贪心)
- hdu 1864 最大报销额 【DP】
- HDU--1864:最大报销额 DP求最大和(最大和有上限)