题目链接: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 ;
}

最新文章

  1. react native 图片样式导致的坑
  2. 多行图片hover加边框兼容IE7+
  3. 初探NIOS II之hello_world
  4. 《CoffeeScript应用开发》学习:第二章 编写第一个CoffeeScript应用程序
  5. selenium2(WebDriver)环境搭建
  6. 两个oracle之间建立db link
  7. SB集中营
  8. Codevs No.3147 矩阵乘法2
  9. [工具]toolbox_graph基本操作
  10. 使用sprintf打印float并控制小数位数时引起的问题
  11. hdu-1272 并查集
  12. linux之普通用户与root用户之间切换
  13. oracle表设置主键自增长
  14. dhtmlx之dhtmlXGrid显示数据 --大数据
  15. shell脚本while read line的使用
  16. go defer笔记
  17. Graphviz安装及简单使用
  18. [转]对form:input标签中的数字进行格式化
  19. 如何查看linux程序被何种版本的编译器编译的?
  20. python3.4学习笔记(十) 常用操作符,条件分支和循环实例

热门文章

  1. 国内好的python学习地址
  2. ln: 创建符号链接 &quot;/usr/bin/java&quot;: 文件已存在
  3. java json字符串与对象转换
  4. MySQL(Innodb)索引的原理
  5. Mysql索引,有哪几种索引,什么时候该(不该)建索引;SQL怎么进行优化以及SQL关键字的执行顺序
  6. 笨方法学python 22,前期知识点总结
  7. 页面ajax自带的访问后台时,正在加载中
  8. javascript:解决两个小数相乘出现无限小数
  9. Linux crontab使用方法
  10. delphi注册热键方法(一)