01背包 hdu1864
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1864
注意事项:
在这里所有输入的价格都是两位小数(题目没说,看论坛才知道的)。
这里单项价格不能超过600,可能有这样的情况:2 A:300 A:400,非常坑(也是看论坛才知道的)。
因为最多有30张发票,假设最多都是1000,那么数组就要开到30*1000*100+5这么大。
因为下标不可以是小数,那么可以把价格乘以100,把它变成整数。
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<cmath>
#include<vector>
#include<set>
#include<cstdio>
#include<string>
#include<deque>
using namespace std;
typedef long long LL;
#define eps 1e-8
#define INF 0x3f3f3f3f
#define maxn 3000005
/*struct point{
int u,w;
};
bool operator <(const point &s1,const point &s2)
{
if(s1.w!=s2.w)
return s1.w>s2.w;
else
return s1.u>s2.u;
}*/
int n,m,k,t;
double limit,dp[maxn];
int value[];
double A,B,C;//用来记录一张发票里面ABC的总价格
bool jug(char c,double cost)//判断这张发票是否可以报销
{
if(c=='A')
A+=cost;
else if(c=='B')
B+=cost;
else if(c=='C')
C+=cost;
else
return false;
if(cost>||A>||B>||C>)
return false;
return true;
}
int main()
{
while(scanf("%lf%d",&limit,&n))
{
limit*=;
if(n==)
break;
fill(value,value+,INF);
int num;
double sum,cost;
char c;
for(int i=;i<=n;i++)
{
scanf("%d",&num);
sum=;
A=,B=,C=;
while(num--)
{
getchar();
scanf("%c:%lf",&c,&cost);
if(sum!=INF&&jug(c,cost))
{
sum+=cost;
if(sum>)
sum=INF;//如果不行就设为无穷大,表示无法报销
}
else
sum=INF;
}
if(sum!=INF)
{
value[i]=sum*;
}
}
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++)//一维的01背包
{
if(value[i]==INF)
continue;
for(int j=(int)limit;j>=value[i];j--)
dp[j]=max(dp[j],dp[j-value[i]]+value[i]);
}
printf("%.2lf\n",dp[(int)limit]/);
}
return ;
}
01背包 hdu1864的更多相关文章
- hdu1864 最大报销额(01背包)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1864 Problem ...
- hdu1864最大报销额(01背包)
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=187#problem/G 该题要注意的就是每张单子A种类的总和不能大与600,同 ...
- HDU1864 最大报销额 01背包
非常裸的01背包,水题.注意控制精度 #include <iostream> #include <algorithm> #include <cstdio> #inc ...
- hdu 1864 最大报销额【01背包】
题目链接:https://vjudge.net/problem/HDU-1864 题目大意: 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求 ...
- UVALive 4870 Roller Coaster --01背包
题意:过山车有n个区域,一个人有两个值F,D,在每个区域有两种选择: 1.睁眼: F += f[i], D += d[i] 2.闭眼: F = F , D -= K 问在D小于等于一定限度的时 ...
- POJ1112 Team Them Up![二分图染色 补图 01背包]
Team Them Up! Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7608 Accepted: 2041 S ...
- Codeforces 2016 ACM Amman Collegiate Programming Contest A. Coins(动态规划/01背包变形)
传送门 Description Hasan and Bahosain want to buy a new video game, they want to share the expenses. Ha ...
- 51nod1085(01背包)
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1085 题意: 中文题诶~ 思路: 01背包模板题. 用dp[ ...
- *HDU3339 最短路+01背包
In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
随机推荐
- Android内存泄漏原因
这段时间调试APP的时候,发现程序在加载了过多的bitmap后会崩溃.查看了日志,原来是发生了内存溢出(OOM).第一次遇到这样的问题,那就慢慢排查吧. 内存优化可以参考胡凯大神的博客Android内 ...
- HTML5 元素超出部分滚动, 并隐藏滚动条
方法一, 利用 css 3 的新特性 -webkit-scrollbar, 但是这种方式不兼容 火狐 和 IE <!DOCTYPE html> <html> <head ...
- Oracle表复杂查询
转自:https://www.cnblogs.com/w-gao/p/7288293.html Oracle表复杂查询 聚合函数 max(字段值) -- 求最大值 min(字段值) -- 求最小值 ...
- Vue.js——使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
转自:https://www.cnblogs.com/keepfool/p/5665953.html 概述 上一篇我们介绍了如何使用vue resource处理HTTP请求,结合服务端的REST AP ...
- Leetcode 题解 First Missing Positive
Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] ...
- aaad
I remember the wonderful moment you appeared before me, like a fleeting vision, like a genius of pur ...
- Delphi TQuery 的Locate用法
Help里的解释 function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions) ...
- 2:if 语句
if 语句 语法形式: 第一种,只有两个分支: if 表达式: something else: something 第二种,有多个分支: if 表达式1: do something 1 elif 表达 ...
- 【388】※ Some useful websites for learning Python
Ref: Python Tips 1. *args and **kwargs 2. Debugging 3. Generators 4. Map, Filter and Reduce 5. set D ...
- 如何在Windows下安装MYSQL,并截图说明
说明 : window 下安装 mysql 虽然简单,但是细节不注意就会安装失败,特别是配置服务器时,Current Root Password:为空:如果输入密码了在后面安装会报错.(不知道设置这个 ...