HDU 1864 —— 最大报销额 01背包
2015-12-15 10:19
513 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1864
注意点:1、将小数*100(均只有两位小数);2、数组大小不要开错;3、单项物品指的是A项、B项、C项,所以是每张发票所有的A钱数不能超过600;4、注意输入;
注意点:1、将小数*100(均只有两位小数);2、数组大小不要开错;3、单项物品指的是A项、B项、C项,所以是每张发票所有的A钱数不能超过600;4、注意输入;
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int maxv = 3000000+10; int dp[maxv]; float q; int n; int a[35]; int main() { while(~scanf("%f%d", &q, &n)) { if(n == 0) break; int cnt = 0; memset(a, 0, sizeof a); memset(dp, 0, sizeof dp); for(int i = 1;i<=n;i++) { bool flag = true; int x; scanf("%d", &x); double suma = 0, sumb = 0, sumc = 0; while(x--) { getchar(); char c; float k; scanf("%c:%f", &c, &k); if(c == 'A') suma += k; else if(c == 'B') sumb += k; else if(c == 'C') sumc += k; else flag = false; } if(flag && suma <= 600 && sumb <=600 && sumc <= 600) a[cnt++] = (suma+sumb+sumc)*100*1.0; } int sum = q*100*1.0; for(int i = 0;i<cnt;i++) { for(int j = sum;j>=a[i];j--) dp[j] = max(dp[j], dp[j-a[i]]+a[i]); } printf("%.2f\n", (float)dp[sum]/100); } return 0; }
相关文章推荐
- linux图形界面安装
- linux图形界面安装
- Linux打包下载命令
- ms中的相关信息
- php中json_decode及foreach使用总结
- 微信开发学习总结-2
- 处理“global.asa”木马文件
- 模拟请求 get 、 post、put、delete 发送 xml\json\a=1&b=2&c= 等形式参数,代理设置
- 3个提升EDM营销效果的小细节
- 一线深入揭秘P2P理财运作内幕:一周吸金500万,三进三出公安局
- Python——debug
- 为什么使用多线程?
- 前缀转中缀(利用栈)
- JSP页面实现循环打印
- Dropout原理介绍
- javascript实现html页面之间参数传递的四种方法实例分析
- 标题和图片的兼容性
- Linux的用户和组群管理
- 360加固宝
- ThinkPHP 跨控制器页面跳转 官方文档 未讲清楚