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

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
 
 
 
变形的01背包问题,其中,由于dp数组中只能存储整数,所以在处理之前分别乘以100,就可以解决i小树的问题了,解决之后可以在除以100
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=;
double value[maxn];
int dp[];
int tvalue[maxn];
int main(){
double sum;
int n;
while(scanf("%lf%d",&sum,&n)!=EOF){
if(n==)
break;
memset(value,,sizeof(value));
memset(dp,,sizeof(dp));
memset(tvalue,,sizeof(tvalue));
int t;
int cnt=;
char c,c1;
double price,pa,pb,pc;
// pa=0,pb=0,pc=0;
for(int i=;i<=n;i++){
pa=,pb=,pc=;
bool flag=true;
scanf("%d",&t);
for(int j=;j<=t;j++){
getchar();
scanf("%c%c%lf",&c,&c1,&price);
// printf("------?%c\n",c);
if(c!='A'&&c!='B'&&c!='C'){
flag=false; } if(c=='A'){
pa+=price;
}
else if(c=='B'){
pb+=price;
}
else if(c=='C'){
pc+=price;
}
}
double tmp_sum=pa+pb+pc;
if(tmp_sum>||pa>||pb>||pc>)
flag=false;
if(flag){
value[cnt++]=tmp_sum;
}
}
/* printf("----->\n");
for(int i=0;i<cnt;i++)
printf("%lf ",value[i]);*/
int tsum=(int)(sum*);
for(int i=;i<cnt;i++){
tvalue[i]=(int )(value[i]*);
} /* printf("//////////\n");
for(int i=0;i<cnt;i++)
printf("%d ",tvalue[i]);
printf("//////////\n");
*/
int up=;
for(int i=;i<cnt;i++){
up+=tvalue[i];
}
if(up<tsum)
tsum=up;
for(int i=;i<cnt;i++){
for(int j=tsum;j>=tvalue[i];j--){
dp[j]=max(dp[j],dp[j-tvalue[i]]+tvalue[i]);
}
}
double ans=dp[tsum]/100.0;
printf("%.2lf\n",ans);
}
return ;
}

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. css3中transform的用法

    transform:rotate旋转deg #box1{ -moz-transform:rotate(10deg); -webkit-transform:rotate(10deg); }transfo ...

  2. [设计模式] javascript 之 建造者模式

    建造者模式说明 1. 将一个复杂对象的 构造 与它的表示相分离,使同样的创建过程可有不同的表示,这就叫做建造者模式. 2. 面向对象语言中的说明,主要角色: 1>. Builder 这个接口类, ...

  3. 利用css3实现超出文本指定行数与省略号效果

    <style> .text1 {/*单行*/ width:200px; overflow:hidden; text-overflow:ellipsis; -o-text-overflow: ...

  4. 嘻哈帮天通苑_poppin——张锋

    l click_me

  5. hdu3966 树链剖分+成段更新

    给你n个点,m条边,p次操作.n个点相连后是一棵树.每次操作可以是x 到 y 增加 z,或者减z,或者问当前点的值是多少. 可以将树分成链,每个点在线段树上都有自己的点,然后线段树成段更新一下. #p ...

  6. strncmp很好的函数

    strcmp比较的是所有的长度,而strncmp可以比较前几个长度 strncmp(s1,s2,n);这样就比较了s1,s2,前n个长度的大小.

  7. Html-Css-div标签设定-剧中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. Cocos2d-X3.0 刨根问底(二)----- 从HelloWorld开始

    小鱼习惯直接从代码实例来学习一套成型的引擎库. 运行cpp-empty-test 一个典型的HelloWorld程序翻看代码结构 看到了 main.h与main.cpp文件就从这里开始 #ifndef ...

  9. Spring POST

    Spring POST+表单对象如果数据格式不正确,则页面直接报400.页面没有反应,烦啊

  10. Android——Canvas类的学习

    转:http://blog.sina.com.cn/s/blog_61ef49250100qw9x.html 今晚瞎折腾,闲着没事画了个机器人——android,浪费了一个晚上的时间.画这丫还真不容易 ...