HDOJ(HDU).1864 最大报销额

题意分析

题目有点问题,原题中说的


单项物品的价值不得超过600元

应该是单类物品的价值不能超过600元。

一开始以为是01背包,后来按贪心写过了。

一张一张发票处理,读入一整张发票的数据。然后检查一下里面是否有不能报销的类别(即除ABC)以外的其他类。然后看一下单类的价钱是否超过600。如都满足题目所说能够报销的要求,则把它存到b数组里面,接着对b数组按照金额降序排序,结合给的经费,先报销大的,再报销小的,遍历一遍即可。

代码总览

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define nmax 35
using namespace std;
double b[nmax];
double a[26];
void check(int pos)
{
double sum = 0;
bool can = true;
for(int i = 0 ;i<=25;++i){
sum+=a[i];
if(i<3){
if(a[i]>600) can = false;
}else if(i >=3){
if(a[i]!=0) can = false;
}
}
if(can) b[pos] = sum;
}
bool cmp(double a ,double b)
{
return a>b;
}
int main()
{
//freopen("in.txt","r",stdin);
int n;
double m;
while(scanf("%lf %d",&m,&n) && n){
memset(b,0,sizeof(b));
for(int i = 1; i<=n; ++i){
int ca; scanf("%d",&ca);
char c; double t;
memset(a,0,sizeof(a));
for(int j = 1; j<=ca;++j){
scanf(" %c:%lf",&c,&t);
a[c-'A']+=t;
}
check(i);
}
double t;
sort(b+1,b+1+n,cmp);
t = m; double cnt = 0;
for(int i =1;i<=n;++i ){
if(b[i]<=t) {t-=b[i];cnt+=b[i];}
}
printf("%.2f\n",cnt);
}
return 0;
}

HDOJ(HDU).1864 最大报销额 (贪心)的更多相关文章

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

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

  2. HDU 1864最大报销额 01背包问题

    B - 最大报销额 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...

  3. HDU 1864 最大报销额(DP)

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

  4. DP专题训练之HDU 1864 最大报销额

    做DP一定要注意数组的大小,嗯,就是这样~ Description 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过10 ...

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

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

  6. HDU 1864最大报销额(一维背包)

    题目地址:HDU 1864 刚上来看着挺麻烦的..细致看了看原来好简单好简单...仅仅要去掉一些不符合要求的发票,剩下的就是最简单的背包问题了..对于小数问题,仅仅要*100就变成整数了. 代码例如以 ...

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

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

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

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

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

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

随机推荐

  1. ES2015学习笔记

    ECMA6学习笔记 参考资料 ECMAScript6入门:http://es6.ruanyifeng.com/ 官方文档:https://babeljs.io/learn-es2015/ 开发软件:W ...

  2. Visual Studio 2015 Test Explorer does not show anything

    Problem After install Visual Studio 2015 community and NUnit Test Adapter, I cannot find test cases ...

  3. Unity Lighting - The Precompute Process 预计算过程(二)

      The Precompute Process 预计算过程 In Unity, precomputed lighting is calculated in the background - eith ...

  4. C 数数位 while循环

    #include <stdio.h> int main(int argc, char **argv) { //定义两个变量  x n 把n初始化 int x; int n=0; //输入x ...

  5. 【转载】appium 操作汇总

    '''.appium api第二弹 锋利的python,这是初稿,2015/1/5 如有错误的地方,请同学们进行留言,我会及时予以修改,尽量整合一份ok的api 作者:Mads Spiral QQ:7 ...

  6. 一键部署pxe环境

    系统:Centos6.5 环境:VMware Workstation12 #!/bin/bash # Please prepare CentOS ISO image first # root pass ...

  7. 【转载】OpenCV(C++ 与 Python 的比较)与 MATLAB 的比较

    原文作者 : Satya Mallick 译者 : aleen42 原文  https://aleen42.gitbooks.io/personalwiki/content/translation/o ...

  8. ServiceStack.Ormlit 使用Insert的时候自增列不会被赋值

    Insert签名是这样的,将第2个参数设置为true就会返回刚插入的自增列ID了,然后可以手工赋值到对象上面去 public static long Insert<T>(this IDbC ...

  9. HTMLTestRunner解决UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in range(128)

    其中HTML和数据库都是设置成utf-8格式编码,插入到数据库中是正确的,但是当读取出来的时候就会出错,原因就是python的str默认是ascii编码,和unicode编码冲突,就会报这个标题错误. ...

  10. apache访问403错误

    1.排查selinux 2.目录权限 3.WEB主目录是否正确