hdu 1864 dp 01背包
来源:互联网 发布:mysql 模糊查询 编辑:程序博客网 时间:2024/06/05 20:14
这里背包容量为可以报销的张数
状态转移方程
dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]+v[i])
表示,前i件物品放在容量为j的背包中
另法,这个题似乎还可以将数据乘以100化为整数去计算,但是感觉不太正确,因为题目中未告知输入数据的精度。。。
#include<fstream>
#include<set>
#include<stack>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long LL;
const int MAX=0xfffffff;
double v[33],dp[33];
double A,B,C;
int main( )
{
//freopen("in.txt","r",stdin);
double q;
int n;
while(scanf("%lf %d",&q,&n)!=EOF&&n)
{
memset(dp,0,sizeof(dp));
memset(v,0,sizeof(v));
int len=0;
while(n--)
{
int n1;
scanf("%d",&n1);
A=B=C=0;
bool flag=1;
while(n1--)
{
char a;
double b;
scanf(" %c:%lf",&a,&b);
if(a=='A') A+=b;
else if(a=='B') B+=b;
else if(a=='C') C+=b;
else
{
flag=0;
}
}
if(flag==0) continue;
else
{
if(A+B+C<=1000&&A<=600&&B<=600&&C<=600)
v[len++]=A+B+C;
}
}
for(int i=0;i<len;i++)
for(int j=len;j>=1;j--)
{
if(dp[j-1]+v[i]<=q)
dp[j]=max(dp[j],dp[j-1]+v[i]);
}
double ans=0;
for(int j=len;j>=1;j--)
if(dp[j]>ans)
ans=dp[j];
printf("%.2lf\n",ans);
}
return 0;
}}
0 0
- hdu 1864 dp 01背包
- DP 01背包 hdu 2602
- hdu 2602 DP 01背包
- hdu 2602 01背包DP
- hdu 2955 (dp 01背包)
- HDU 2955 DP 01背包
- HDU 1864 最大报销额(DP,01背包)
- 【DP|01背包】HDU-1864 最大报销额
- HDU 1864 - 最大报销额(DP`01背包)
- hdu 1864 最大报销额01背包dp
- HDU 1864 最大报销额 (dp 01背包)
- hdu 2955 Robberies 【dp】 01背包
- 【DP|01背包】HDU-2602 Bone Collector
- HDU 2546饭卡(DP:01背包)
- HDU 2955 Robberies(DP:01背包)
- HDU 2602 Bone Collector(DP:01背包)
- HDU 2564 饭卡 01背包 dp
- hdu 2602 Bone Collector 01背包 dp
- hdu5386
- 利用两个栈实现队列的入队出队
- 借助江苏电信欢go进行流量推广活动合作的工作规范(一)
- 处理区间问题之树状数组与莫队算法
- 关于Android中的四大组件(AIDL Service的使用)
- hdu 1864 dp 01背包
- C语言 产生一些随机数 求最小值
- NVIDIA Jetson TK1开发板烧写系统Tegra R21.4
- ORACLE 序列
- 电子设计不得不说的接地技术
- 【转】JAVA的动态代理
- 对慕课网 -- php模糊查询技术 的学习
- Leetcode#60||Permutation Sequence
- android webview设置自适应任意大小的pc网页