最大报销额
来源:互联网 发布:更相减损术算法 图 编辑:程序博客网 时间:2024/06/10 07:40
/*又一次做了一个所谓的01背包的题,给你一个固定的最大报销值,你能报销的值不能超过这个最大固定值。现在给你,很多报销单,问能报销的最大值(解释题意不给力)!很明显的01背包思想。上次我还在问,如果碰到浮点数怎么处理,今天就果断碰到一个浮点的01背包。果断只能加大数据,*100然后作为01整数背包处理!菜鸟解决一个水题,也感觉乐在其中。*/
#include <iostream>#include <cstdio>#include <iomanip>#include <cstdlib>#include <cstring>using namespace std;int dp[3100005],a[35];double deal(char s[]){double q=0;char sh[20];int l=strlen(s),k=0;for(int i=2;i<l;i++) sh[k++]=s[i];q=atof(sh);return q;}int main (){//freopen("z.txt","r",stdin);char str[20];int n,m,i,j,k;double s,t;while(cin>>s>>n){k=0;if(n==0) break;for(i=0;i<n;i++){int f=0,flag=0;double temp[3],tenp=0.0;memset(temp,0,sizeof(temp));for(cin>>m,j=0;j<m;j++){cin>>str;t=deal(str);if('C'<str[0]) flag=1;temp[str[0]-'A']+=t;}if(flag==0){ for(j=0;j<3;j++) { tenp+=temp[j]; if(temp[j]>600) f=1; } if(f!=1 && tenp<=1000.0) a[k++]=int(tenp*100.0);}}memset(dp,0,sizeof(dp));int weight=int(s*100);for(i=0;i<k;i++){for(j=weight;j>=a[i];j--)if(dp[j-a[i]]+a[i]>dp[j])dp[j]=dp[j-a[i]]+a[i];}for(j=weight;j>=0;j--)if(dp[j]>0) break;double res=dp[j]*1.0/100.0;cout<<setiosflags(ios::fixed)<<setprecision(2)<<res<<endl;}return 0;}
- hdu1864 最大报销额
- hdu1864最大报销额
- 最大报销额
- hdu1864 最大报销额
- hdu1864 最大报销额
- HDOJ1864 最大报销额
- hdu1844 最大报销额
- HDU1864----最大报销额
- OJ_1025 最大报销额
- 最大报销额
- hdu1864 最大报销额
- hdu 最大报销额
- DP 最大报销额
- 最大报销额
- 1025.最大报销额
- hdu1864 最大报销额
- hdu1864 最大报销额
- hdu1864最大报销额
- native2ascii工具使用
- 排序算法小结
- linux 双网卡共享上网
- OGG 加源端进程
- 服务-钩子-权限
- 最大报销额
- 观察者模式
- android AlarmService
- Android 4.0 ICS SystemUI浅析——SystemUI启动流程
- js将中文转换成拼音可首字母大写
- hdu 1213
- Java学习笔记(十二)
- 迄今为止对矩阵写的最好的文章---------理解矩阵
- Why Google chose the Apache Software License over GPLv2 for Android