http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=187#problem/G

该题要注意的就是每张单子A种类的总和不能大与600,同样B,C类也一样,还有注意如果不是A,B,C类的不可以报销;

该题就是要把浮点型变成整数这样才能用01背包,这里就只要乘以100就可以了。

这题考的背包很简单,就是输入的金额为背包的容积,债券既是物体的体积又是物体的利润。就是处理输入的数据有点麻烦,这是我所不擅长的。

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

最新文章

  1. ionic 获取手机所在位置
  2. 【Android自学日记】五大布局常用属性
  3. 从零开始学习Android(一)Android环境的搭建
  4. NLPIR分词工具的使用(java环境下)
  5. 笔记8:winfrom连接数据库DBHelp
  6. BZOJ 3165 Segment
  7. js防止回车(enter)键提交表单及javascript中event.keycode
  8. extjs folder is lost解决方法 和 FineUI主题切换时 iframe内的内容主题不变的解决方法
  9. Vijos 1004 伊甸园日历游戏 博弈
  10. 解决eclipse使用tomcat启动项目后访问项目404的问题
  11. 计算kdj
  12. mysql 开发进阶篇系列 21 磁盘I/O问题(RAID)
  13. 巧用NULL模式解耦依赖
  14. error occurred at recursive SQL level 1
  15. solrj索引操作
  16. PyQt4显示提示信息
  17. HTML5之pushstate、popstate操作history,无刷新改变当前url
  18. nvm npm node.js的关系
  19. pthread到Win32thread
  20. gulp快速将css中的px替换成rem

热门文章

  1. 【前端积累】javascript事件
  2. 【大数据系列】Hadoop DataNode读写流程
  3. 【Java基础】System的arraycopy方法拷贝数组
  4. sencha touch 隐藏滚动条样式的几种方式
  5. [转]F5负载均衡算法及基本原理
  6. js json转字符串
  7. Windows Phone 8.1 Update Preview backup失败的解决方法
  8. 【CF633H】Fibonacci-ish II 莫队+线段树
  9. MAC SVN 基本设置 终端命令
  10. android 关于view的onTouch和onClick同时触发解决方案