B - 最大报销额

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Appoint description:

Description

现有一笔经费可以报销一定额度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总额不得超过1000元,每张 发票上,单项物品的价值不得超过600元。现请你编写程序,在给出的一堆发票中找出可以报销的、不超过给定额度的最大报销额。
 

Input

测试输入包含若干测试用例。每个测试用例的第1行包含两个正数 Q 和 N,其中 Q 是给定的报销额度,N(<=30)是发票张数。随后是 N 行输入,每行的格式为:
m Type_1:price_1 Type_2:price_2 ... Type_m:price_m
其中正整数 m 是这张发票上所开物品的件数,Type_i 和 price_i 是第 i 项物品的种类和价值。物品种类用一个大写英文字母表示。当N为0时,全部输入结束,相应的结果不要输出。
 

Output

对每个测试用例输出1行,即可以报销的最大数额,精确到小数点后2位。
 

Sample Input

  1. 200.00 3
  2. 2 A:23.50 B:100.00
  3. 1 C:650.00
  4. 3 A:59.99 A:120.00 X:10.00
  5. 1200.00 2
  6. 2 B:600.00 A:400.00
  7. 1 C:200.50
  8. 1200.50 3
  9. 2 B:600.00 A:400.00
  10. 1 C:200.50
  11. 1 A:100.00
  12. 100.00 0

Sample Output

123.50
1000.00
1200.50
 
 
 
变形的01背包问题,其中,由于dp数组中只能存储整数,所以在处理之前分别乘以100,就可以解决i小树的问题了,解决之后可以在除以100
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<iostream>
  4. #include<algorithm>
  5. using namespace std;
  6. const int maxn=;
  7. double value[maxn];
  8. int dp[];
  9. int tvalue[maxn];
  10. int main(){
  11. double sum;
  12. int n;
  13. while(scanf("%lf%d",&sum,&n)!=EOF){
  14. if(n==)
  15. break;
  16. memset(value,,sizeof(value));
  17. memset(dp,,sizeof(dp));
  18. memset(tvalue,,sizeof(tvalue));
  19. int t;
  20. int cnt=;
  21. char c,c1;
  22. double price,pa,pb,pc;
  23. // pa=0,pb=0,pc=0;
  24. for(int i=;i<=n;i++){
  25. pa=,pb=,pc=;
  26. bool flag=true;
  27. scanf("%d",&t);
  28. for(int j=;j<=t;j++){
  29. getchar();
  30. scanf("%c%c%lf",&c,&c1,&price);
  31. // printf("------?%c\n",c);
  32. if(c!='A'&&c!='B'&&c!='C'){
  33. flag=false;
  34.  
  35. }
  36.  
  37. if(c=='A'){
  38. pa+=price;
  39. }
  40. else if(c=='B'){
  41. pb+=price;
  42. }
  43. else if(c=='C'){
  44. pc+=price;
  45. }
  46. }
  47. double tmp_sum=pa+pb+pc;
  48. if(tmp_sum>||pa>||pb>||pc>)
  49. flag=false;
  50. if(flag){
  51. value[cnt++]=tmp_sum;
  52. }
  53. }
  54. /* printf("----->\n");
  55. for(int i=0;i<cnt;i++)
  56. printf("%lf ",value[i]);*/
  57. int tsum=(int)(sum*);
  58. for(int i=;i<cnt;i++){
  59. tvalue[i]=(int )(value[i]*);
  60. }
  61.  
  62. /* printf("//////////\n");
  63. for(int i=0;i<cnt;i++)
  64. printf("%d ",tvalue[i]);
  65. printf("//////////\n");
  66. */
  67. int up=;
  68. for(int i=;i<cnt;i++){
  69. up+=tvalue[i];
  70. }
  71. if(up<tsum)
  72. tsum=up;
  73. for(int i=;i<cnt;i++){
  74. for(int j=tsum;j>=tvalue[i];j--){
  75. dp[j]=max(dp[j],dp[j-tvalue[i]]+tvalue[i]);
  76. }
  77. }
  78. double ans=dp[tsum]/100.0;
  79. printf("%.2lf\n",ans);
  80. }
  81. return ;
  82. }

HDU 1864最大报销额 01背包问题的更多相关文章

  1. HDU 1864 最大报销额 0-1背包

    HDU 1864 最大报销额 0-1背包 题意 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上, ...

  2. HDU -1864最大报销额(01背包)

    这道题属于简单的01背包,但是背包问题还算简单,就是前面的细节处理的时候要注意,题意大致说了三条限制吧 1. 只有a, b, c 三种类型的发票可以报销,其它的一律不报销 2. 物品单项的报销额不超过 ...

  3. hdu 1864 最大报销额 01背包

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

  4. HDU 1864 最大报销额 (DP-01背包问题)

    题意:中文题,你懂得. 析:拿过题目一看,本来以为是贪心,仔细一看不是贪心,其实是一个简单的01背包问题(DP),不过这个题的坑是在处理发票上,刚开始WA了一次. 分析一下什么样的发票是不符合要求的: ...

  5. HDU 1864 最大报销额(01背包,烂题)

    题意:被坑惨,单项不能超过600,其实是一张发票上A类/B类/C类的总和分别不能超过600. 思路:此题的数据很烂.用贪心也能过,用01背包也可以.都测试不出到底那些是错的. #include < ...

  6. HDOJ(HDU).1864 最大报销额 (贪心)

    HDOJ(HDU).1864 最大报销额 题意分析 题目有点问题,原题中说的 单项物品的价值不得超过600元 应该是单类物品的价值不能超过600元. 一开始以为是01背包,后来按贪心写过了. 一张一张 ...

  7. HDOJ 1864 最大报销额(01背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=1864 最大报销额 Time Limit: 1000/1000 MS (Java/Others)    Memor ...

  8. hdu 1864 最大报销额【01背包】

    题目链接:https://vjudge.net/problem/HDU-1864 题目大意: 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求 ...

  9. hdu 1864 最大报销额(01背包)

    最大报销额 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

随机推荐

  1. Daily Scrum – 1/4

    Meeting Minutes 大家讨论了一下作业的内容,以及用户的反馈,商量了一下长期计划(naive)的完成方式. 好像有些时候用户测试的时候会崩溃,不过我们自己用的时候一直没有出现过,分析可能是 ...

  2. 传智168期JavaEE就业班 day03-js

    * 课程回顾: * CSS * CSS的简介 * 层叠样式表. * CSS与HTML的结合(4种) * HTML的标签提供了属性 style="CSS的代码" * HTML提供了标 ...

  3. card-test

    <!DOCTYPE html><html> <head> <title>test</title> <style type=" ...

  4. iOS边练边学--NSURLSessionDataTask实现文件真正的断点续传

    实现重点: NSURLSessionDataTask要设置请求头,从路径中获取文件已经下载的长度(文件没有下载过的话,长度为0).通过这个长度设置请求的Range 如图: 接收到请求的时候key:文件 ...

  5. hdu2222 字典树

    要注意二点 . 这组数据 1 6 she he he say shr her yasherhs出现重复的,也要算.所以这里答案为4: 这一组 1 6 she he he say shr her yas ...

  6. BZOJ-1207 打鼹鼠 DP(LIS)

    1207: [HNOI2004]打鼹鼠 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2276 Solved: 1116 [Submit][Statu ...

  7. IIS7部署项目时提示:"错误消息 401.2。: 未经授权: 服务器配置导致登录失败。"的解决办法

    这个错误的定位:你的站点使用了Forms验证,而且在部署在生产环境的时候,设置错误,或者注释了. 解决方法如下: 1.检查Forms配置是否屏蔽. 2.有权限访问的资源是否已经开发. 基本就围绕以上两 ...

  8. UVa 1347 Tour

    Tour Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Description   Joh ...

  9. UVA 1398 Meteor

    传送门 Solution: 记一颗流星在视野内的时间段为(L, R), 为了使所有(L, R)都取整数,首先将坐标放大. 放大倍数可取为 LCM(1, 2, ..., 10)= 2520 接着计算:从 ...

  10. 《驾驭Core Data》 第二章 Core Data入门

    本文由海水的味道编译整理,请勿转载,请勿用于商业用途.    当前版本号:0.4.0 第二章 Core Data入门 本章将讲解Core Data框架中涉及的基本概念,以及一个简单的Core Data ...