转载请注明出处:http://blog.csdn.net/u012860063

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1864

Problem 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
200.00 3 2 A:23.50 B:100.00 1 C:650.00 3 A:59.99 A:120.00 X:10.00 1200.00 2 2 B:600.00 A:400.00 1 C:200.50 1200.50 3 2 B:600.00 A:400.00 1 C:200.50 1 A:100.00 100.00 0
Sample Output
123.50 1000.00 1200.50

该题要注意的就是每张单子A种类的总和不能大与600,相同B,C类也一样,刚開始我就错了这里,还有注意假设不是A,B,C类的不能够报销;

该题就是要把浮点型变成整数这样才干用01背包,这里就仅仅要乘以100就能够了。

代码例如以下:

#include <cstdio>
#include <cstring>
#define M 3000057
//因为每张发票不超过1000,最多30张,扩大100倍数后开这么大就可以
int f[M],val[M],flag[47];
int max(int a,int b)
{if(a > b)return a;else return b;
}
int main()
{double Q,x;int X,q,t,n,i,j,k,l,N,m;char C;while(scanf("%lf%d",&Q,&N) && N ){q = (int)(Q*100);//将小数转换为整数memset(flag,0,sizeof(flag));memset(val,0,sizeof(val));memset(f,0,sizeof(f));l = 0,k=0;for(i = 0 ; i < N ; i++){scanf("%d",&m);int A1=0,B1=0,C1=0;for(j = 0 ; j < m ; j++){scanf("%*c%c:%lf",&C,&x);X=(int)(x*100);if(C!='A' && C!='B' && C!='C'){flag[i] = 1;continue;}if(C == 'A')A1+=X;else if(C == 'B')B1+=X;else if(C == 'C')C1+=X;if(X>60000 || A1>60000 || B1>60000 || C1>60000){flag[i] = 1;continue;}if(flag[i] == 1)continue;else{val[k]+=X;}}if(flag[i]!=1)k++;elseval[k] = 0;}for(i = 0 ; i < k ; i++)//01背包{for(j = q ; j >= val[i]; j--){f[j] = max(f[j],f[j-val[i]]+val[i]);}}printf("%.2lf\n",f[q]/100.0);}return 0;
}

hdu1864 最大报销额(01背包)相关推荐

  1. HDU1864 最大报销额 01背包

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Prob ...

  2. hdu1864最大报销额 (01背包)

    Problem Description 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品 ...

  3. HDU - 最大报销额(01背包|贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1864 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...

  4. hdu 1864 最大报销额01背包dp

     最大报销额 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Subm ...

  5. HDU1864 最大报销额【0-1背包】

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

  6. hun暑期实训 最大报销额(01背包) 关于动态内存分配的new与delete

    文章目录 题目 思路 AC代码1 AC代码2 new与delete 题目 思路 这个题主的难点要有三个方面. 第一个方面是数据不好输入.题目中所给的数据都是做题需要的数据,而且是需要分开存储的.对于字 ...

  7. hdoj 1864 最大报销额 【01背包】||【dfs】

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

  8. HDU 1864 最大报销额 (dp 01背包)

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

  9. 最大报销额 HDU - 1864(DP+01背包)

    最大报销额 HDU - 1864 点击跳转↑ 题设:多组输入,每组输入一对Q和N,分别代表当前的公费,和需要报销的账单总数.接下来N行,每行开始一个m,接下来是m项物品的名称和价格.求:在所有符合报销 ...

  10. HDUOJ1864最大报销额(01背包)

    最大报销额 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissio ...

最新文章

  1. 清华官宣:前百度总裁张亚勤正式加盟清华大学
  2. PLSQL的截取函数
  3. 今夜,我们一起缅怀对美好事物痴迷的青葱岁月
  4. SVN报错working copy is not uptodate
  5. 如何获得CSDN访问量和积分
  6. 请问运行py文件的时候怎么样可以不让那个黑框一闪...
  7. c语言gs迭代法解方程,ex1_7-GS迭代法例题源程序及注释.pdf
  8. “21天好习惯“第一期-2
  9. Coursera机器学习课后作业Matlab代码(1~9周)
  10. 1.5(java学习笔记)this关键字
  11. MDM数据质量应用说明
  12. Win10系统完全卸载52好压的方法
  13. 【脚本】去掉win7快捷方式的小箭头
  14. 《道德经》全文 (马王堆出土帛书版)
  15. 数字IC设计工程师笔试面试经典100题
  16. 如何屏蔽掉某网址不能访问
  17. 【每天学点管理】——员工激励
  18. 对比语法错误、语义错误以及运行时错误
  19. 耶鲁大学 博弈论(Game Theory) 笔记4-足球比赛与商业合作之最佳对策
  20. SAP系统中各Client设置说明

热门文章

  1. ASE V15.7下载地址
  2. 一位软件工程师的6年总结收藏
  3. Android 调整控件位置和大小(以textView为例,并设置字体与背景颜色)
  4. 为什么分布式数据库中不使用uuid作为主键?
  5. 计划任务,机器码与注册码,Web服务
  6. android View.getWidth() 和View.getHeight()返回0
  7. python thrift 示例
  8. Forms验证中的roles(转)
  9. MySQL安装配置详解(5.5 For Windows)
  10. 输入三个字符串,按由小到大的顺序输出