本题也是一个背包的问题,我觉得这道题的核心就是根据精确度将浮点型转化为整型然后利用动态规划进行求解,注意对题意的理解,有3种支票是不能够报销的。

我开始照着这个思路进行思考,但是敲出来的第一个代码居然超时了,想了一下没想出来就看了一下别人的代码,感觉上没什么才差别,但是别人的却a掉了。。。希望有哪位朋友能够指点一下。

超时的代码:

#include"iostream"
#include"stdio.h"
#include"cmath"
#include"string.h"
#include"algorithm"
#define mx 10005
using namespace std;
int dp[],flag,b[];
char type;
double money;
int main()
{
double m,suma,sumb,sumc,sum;
int i,j,n,num,k;
while(cin>>m>>n,n)
{
int count=;
int x=(int)(m*);
for(i=;i<=n;i++)
{
cin>>num;
suma=sumb=sumc=sum=;
getchar();
flag=;
for(j=;j<=num;j++)
{
cin>>type;
getchar();
cin>>money;
if(j<num) getchar();
money=(int)(money*);
if(!flag){
if(type=='A')
{
suma+=money;
if(suma>) {flag=;break;}
}
else if(type=='B')
{
sumb+=money;
if(sumb>) {flag=;break;}
} else if(type=='C')
{
sumc+=money;
if(sumc>) {flag=;break;}
}
else {flag=;break;} }
}
sum=suma+sumb+sumc;
if(!flag&&sum<=) b[count++]=sum;
}
memset(dp,,sizeof(dp));
for(i=;i<=count;i++)
{
for(k=x;k>=b[i];k--)
{
if(dp[k]<dp[k-b[i]]+b[i])
dp[k]=dp[k-b[i]]+b[i];
}
}
printf("%.2lf\n",dp[x]/100.0);
}
return ;
}

这里是别人的代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int dp[]={};
int DP( int num[],int count, int sum )
{
memset( dp,,sizeof( dp ) );
for(int i=;i<count; i++)
{
for( int j=sum;j>=num[i];j-- )
{
if( dp[j]<dp[j-num[i]]+num[i] )
dp[j]=dp[j-num[i]]+num[i];
}
}
return dp[sum];
}
int main()
{
int n,num[],m;
double sum,price;
char c;
while( scanf( "%lf%d",&sum,&n ),n )
{
int count=;
while( n-- )
{
scanf( "%d",&m );
int flag=;
int t=,ta=,tb=,tc=;
while( m-- )
{
int x;
scanf( "%*c%c:%lf",&c,&price );
price*=;
x=( int )price;
if( flag== )
{
if((c=='A')||(c=='B')||(c=='C') )
{
if( c=='A' )
if( ( ta+x )<= )
ta+=x;
else flag=;
if( c=='B' )
if( ( tb+x )<= )
tb+=x;
else flag=;
if( c=='C' )
if( ( tc+x )<= )
tc+=x;
else flag=;
}
else flag=;
}
}
t=ta+tb+tc;
if( flag==&&t<= )
num[count++]=t;
}
sum*=;
int t=( int )sum;
printf( "%.2lf\n",(DP( num ,count,t)/100.0 )); }
return ;
}

hdu 最大报销额的更多相关文章

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

    http://acm.hdu.edu.cn/showproblem.php?pid=1864 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...

  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. HDOJ(HDU).1864 最大报销额 (贪心)

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

  5. 【hdu 1864】最大报销额

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

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

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

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

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

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

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

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

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

随机推荐

  1. Java for LeetCode 174 Dungeon Game

    The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dungeon. ...

  2. kvm 克隆虚拟机

    两步: 第一步导出XML: [root@ok ~]# virsh dumpxml centos02 >12c.xml 第二步磁盘文件 [root@ok virhost]# cp centos02 ...

  3. SpringMVC详细示例实战

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...

  4. Java Hour 56 Spring 和 Hibernate 的集成

    上一章节我们完成了一个简单的Spring 的试验品,这章要让Spring 上战场了,不要慌,步骤都是一样的. Spring 对 Hibernate 的支持是很多方面的,第一个战场是SessionFac ...

  5. html 表单 dom 注意跟表单的name值一致

    html 表单 dom 注意跟表单的name值一致 <script type="text/javascript"> function checkForm() { var ...

  6. 在HTML中优雅的生成PDF

    关键代码<script type=</text>          </para>          <para align=" value=" ...

  7. poj 3252 组合数

        主要考察组合数知识,初始化的时候参考公式 首先先推个公式,就是长度为len的Round Numbers的个数.      长度为len,第一位肯定是1了.      那么后面剩下 len-1位 ...

  8. Z.XML第二次迭代分数分配

    这是一篇简介的日志. 它关于二轮迭代Z-XML团队7名成员的分数分配. 每名成员的工作内容与之前的任务分工相同,即,大家都非常好的完成了计划的工作. 按照最初设定的分数分配原则,在今晚大家吃全家桶之前 ...

  9. C语言位运算详解(转载)

    转载自:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C ...

  10. Kinect学习笔记(六)——深度数据测量技术及应用

    一.Kinect视角场 1.43°垂直方向和57°水平方向可视范围. 2.视角场常量值定义 属性 描述 Format 获取或设置深度图像格式 MaxDepth 获取最大深度值 MinDepth 获取最 ...