HDOJ 1864 最大报销额
来源:互联网 发布:mac视频剪辑工具 编辑:程序博客网 时间:2024/06/10 09:20
今天做的两道DP和我以前做的不同,以前没试过换个变量来当作背包的容量,前面一道题奠定了这题的基础,这道题一看见的时候就知道用支票的个数来当容量,这道题有点题意不清,没看discuss的时候我也把题意理解错了,它说单项物品不超过600元其实是此类物品不超过600元,这道题也不能完全按照Robberies来做,这里有金额q的限制.
转移方程为d[i]=max(d[j])+p[i]; 1=<j<i;
代码:
#include<iostream>#include<cmath>using namespace std;double dp[35],p[35];int main(){ int n,flag,i,j,m; double q,sum,temp,d[100]; char ch; while( scanf("%lf%d",&q,&n)&&n){ j=1; for( i=1; i<=n; i++){ scanf("%d",&m); flag=1; sum=0; memset(d,0,sizeof(d)); while( m--){ scanf(" %c:%lf",&ch,&temp); d[ch-'A']+=temp; //是同类物品的累计 if( ch!='A'&&ch!='B'&&ch!='C'||d[ch-'A']>600){ flag=0; } sum+=temp; } if( sum<=1000&&flag) p[j++]=sum; } n=j-1; memset(dp,0,sizeof(dp)); double ret=0; for( i=1; i<=n; i++){ double mx=0.0; for( j=1; j<i; j++) if( dp[j]>mx&&dp[j]+p[i]<=q) mx=dp[j]; dp[i]=mx+p[i]; if( ret<dp[i]) ret=dp[i]; } printf("%.2lf\n",ret); } return 0;}
或者把最后的关键代码改成比较普通的0/1背包就比较好理解了。
for( i=1; i<=n; i++){ for( j=n; j>0; j--){ temp=dp[j-1]+p[i]; if( temp<=q&&temp>dp[j]) dp[j]=temp; } }
- HDOJ 1864 最大报销额
- HDOJ 1864 最大报销额
- HDOJ--1864--最大报销额
- hdoj 1864 最大报销额
- hdoj 1864 最大报销额
- hdoj 1864 最大报销额
- hdoj-【1864 最大报销额】
- hdoj 1864 最大报销额 【01-背包】
- hdoj-1864-最大报销额【动态规划】
- HDOJ 1864 最大报销额(贪心)
- hdoj 1864 最大报销额【01背包】
- HDOJ(HDU).1864 最大报销额 (贪心)
- hdoj 1864 最大报销额 【DP】【01背包】【水】
- HDOJ 题目1864 最大报销额(01背包)
- hdoj 1864 最大报销额(01背包问题)
- HDOJ 题目1864 最大报销额 (贪心)
- hdoj 1864 最大报销额 【01背包】||【dfs】
- HDOJ 1864 最大报销额 【0 1背包】
- 线程锁的概念函数EnterCriticalSection和LeaveCriticalSection的用法
- A painless introduction to PIX for Windows
- ubuntu11.10安装matlib
- 28款jQuery Tree 树形结构插件
- C R E AT E S U S P E N D E D标志使得应用程序能够在它有机会执行任何代码之前修改线程的某 些属性
- HDOJ 1864 最大报销额
- 对Remoting进行封装,方便使用
- 拦截鼠标以及拦截的解决方案
- 低落
- hdu 4301 Divide Chocolate 动态规划 递推 多校联合赛第二题
- C r e a t e T h r e a d的最后一个参数是p d w T h r e a d I D,可以(并且通常是这样做的)为该参 数传递N U L L。它告诉函数,你对线程的I D不感兴趣
- Ubuntu 12.04 LTS 下 OpenGL环境的搭建
- 使用Pix For Windows调试Shader傻瓜教程
- 决不应该调用E x i t T h r e a d。应该使用Visual C++运行期库函数_ e n d t h r e a d e x