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 ...
随机推荐
- Notification html5 的通知api
https://developer.mozilla.org/zh-CN/docs/Web/API/notification 使用方法 var notification = new Notificati ...
- struts2默认临时文件更改
struts的文件上传mutifile会有一个临时文件地址,如果需要使用自己指定临时文件地址需要在struts.xml中设置以下内容. <constant name="struts.m ...
- vue:在路由跳转中使用拦截器
1:首先在路由对象中的某一个具体的路由对象加这样一个属性 meta: { requireAuth:true } 2:然后在main.js中添加这段代码 router.beforeEach((to, ...
- python环境和工具
1.版本问题 python2.X和python3.X是不兼容,所以选择如果选择了2.X版本,那么为了避免兼容性的问题,在以后使用其他python库或者工具时,也需要选择相对应的版本. 下载地址:htt ...
- Linux命令:索引
目录 A B C D E F G H I jobs J K L M N nohup O P Q R S T trU V W X Y Z A alias B C cd D dirs E F G ...
- webpack 自动发现 entry 的配置和引用方式
假定我们的项目目录为如下的样子: - root/ - assets/ - app/ - global.js - index/ - index.js - auth/ - login.js - regis ...
- curl get请求
curl --proxy 192.168.1.159:8889 -d "grant_type=client_credential&appid=wxxx&secret=xxx ...
- JAVA语言 第四周
oh my god! 说实话,上周的目标没有完成. 这一周过的太随便了,比刚放假时候的热情减少的太多了. 具体干了啥,就不说了吧.好像什么完整的事都没有干~~~~~ 不过一直在完善代码,已经能实现部分 ...
- java-学习3(jdk-环境配置)
学习java先安装jdk环境配置 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htm ...
- Java url爬虫
java 爬虫抓取 可以在线编辑java代码的连接http://www.runoob.com import java.util.Scanner; import java.util.ArrayList; ...