博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-1864:最大报销额(浮点数01背包)
阅读量:6787 次
发布时间:2019-06-26

本文共 1553 字,大约阅读时间需要 5 分钟。

链接:

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

题解:处理出可以报销的发票的数组 a[] 。

   定义:dp[i] 为报销第 i 个发票的情况下报销的最大值;

   状态转移:dp[i] = max( dp[i],  dp[0 ~ i-1] + a[i]);

#include 
using namespace std;const double EPS = 1e-6;const int INF = 0x3f3f3f3f;const int mod = 1e9 + 7;const int maxn = 30 + 10;double Q;int n, m;double a[maxn];double dp[maxn];int main(){ while(scanf("%lf%d", &Q, &n) != EOF && n){ memset(a, 0, sizeof(a)); memset(dp, 0, sizeof(dp)); int cnt = 1; for(int i = 0; i < n; i++){ scanf("%d", &m); bool ok = true; char kind; double A = 0, B = 0, C = 0, p; for(int i = 0; i < m; i++){ scanf(" %c:%lf", &kind, &p); if(kind < 'A' || kind > 'C' || p > 600) ok = false; else if(kind == 'A') A += p; else if(kind == 'B') B += p; else if(kind == 'C') C += p; } if(A > 600 || B > 600 || C > 600 || A + B + C > min(1000.0, Q)) ok = false; if(ok) a[cnt++] = A + B + C; } for(int i = 1; i < cnt; i++){ for(int j = i - 1; j >= 0; j--){ if(dp[j] + a[i] <= Q){ dp[i] = max(dp[i], dp[j] + a[i]); } } } double ans = 0; for(int i = 1; i < cnt; i++) ans = max(ans, dp[i]); printf("%.2f\n", ans); } return 0;}

 

转载于:https://www.cnblogs.com/chenquanwei/p/9362669.html

你可能感兴趣的文章
java.lang.NoSuchMethodError问题分析
查看>>
Spring Ioc的实现----------用idea实现控制反转
查看>>
Java基础——变量
查看>>
跨域获取图片并自行上传保存
查看>>
Junit,Mockito,PowerMockito 进行单元测试
查看>>
要通过面试,Lamdba要了解多少?
查看>>
vim介绍、颜色显示和移动光标、一般模式下复制、剪切和粘贴
查看>>
PHP安装
查看>>
mysql用户管理-常用sql-数据库备份恢复
查看>>
springcloud应用程序上下文层次结构
查看>>
UI2Code智能生成Flutter代码--整体设计篇
查看>>
<java8>Java8 Optional 的使用
查看>>
教你怎样使用Spring Boot开发邮件系统?
查看>>
JAVA springboot微服务b2b2c电子商务系统 (五)springboot整合 beatlsql
查看>>
沙龙报名 | 探索新零售时代的数字化创新
查看>>
spring security中当前用户信息
查看>>
[Golang软件推荐] RSA公私钥加解密(解决Golang私钥加密公钥解密问题)
查看>>
html-meta http-equiv设置网页指定时间跳转
查看>>
python 入门
查看>>
如何防止http请求数据被篡改
查看>>