HDU-1864&&HDU-2602(01背包问题)
DP-01背包问题例题
输入处理有点恶心人,不过处理完后就是简单的DP了
从头开始dp[i]表示从0开始到i的最优结果,最后从都边里dp数组,求得最大的报销额。
对于每个i都要从头维护最优结果。(二刷感觉仍不得dp精髓,,,,)
HDU-1864最大报销额
#include <iostream>
#include <queue>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
#include <map>
#include <vector>
#define INF 0x3f3f3f3f
#define FRE() freopen("in.txt","r",stdin) using namespace std;
typedef long long ll;
const int maxn = ;
double dp[maxn];
double money,a[maxn]; bool judge(char op)
{
if(op=='A'||op=='B'||op=='C')
return true;
return false;
} void init(int n,int& index)
{
char op,ch;
while(n--)
{
int x,ok = ;
double tmp,sumA = ,sumB = ,sumC = ;
cin>>x;
for(int i = ; i<x; i++)
{
cin>>ch>>op>>tmp;
if(judge(ch))
{
if(ch=='A')sumA += tmp;
if(ch=='B')sumB += tmp;
if(ch=='C')sumC += tmp;
}
else
ok = ;
}
if(ok && (sumA<=600.0 && sumB<=600.0 && sumC<=600.0 && (sumA+sumB+sumC) <=1000.0))
a[index++] = (sumA+sumB+sumC)*100.0;
}
return;
} int main()
{
int n,index = ,in;
while(cin>>money>>n)
{
if(n==)break;
index = ;
memset(a,,sizeof(a));
init(n,index);
// for(int i = 0; i<index; i++)
// {
// cout<<a[i]<<" ";
// }
// cout<<endl<<endl;
memset(dp,,sizeof(dp));
in = ;
for(int i = ; i<index; i++)//枚举每一个可以报销的票
{
for(int j = ; j<=i; j++)
{
if(dp[j]+a[i] <= money*100.0)
{
dp[i] = max(dp[i],dp[j]+a[i]);//每一个票的位置上对应一个dp维护该位置上的最大报销额度
}
}
}
double ans = ;
for(int i = ; i<index; i++)
{
ans = max(ans,dp[i]);
}
printf("%.2f\n",ans/100.0);
}
return ;
}
HDU-2602 Bone Collector
01背包问题的板子问题
做这个题的时候尝试了紫书上讲的滚动数组;
#include <iostream>
#include <cstdio>
#include <cstring> using namespace std;
const int maxn = ;
int N,V;
int wet[maxn],val[maxn];
int dp[maxn]; int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
memset(wet, , sizeof(wet));
memset(val, , sizeof(val));
memset(dp, , sizeof(dp));
scanf("%d%d",&N,&V);
for(int i = ; i < N; i++)
scanf("%d",&val[i]);
for(int i = ; i < N; i++)
scanf("%d",&wet[i]);
for(int i = ; i < N; i++)//枚举每一块骨头
{
for(int j = V; j >= ; j--)//枚举背包体积区间的每一个大小
{
if(j >= wet[i])//如果背包体积大于骨头的体积
dp[j] = max(dp[j], dp[j - wet[i]] + val[i]);//更新该体积所能装下的最大的价值
}
}
printf("%d\n",dp[V]);
}
return ;
}
HDU-1864&&HDU-2602(01背包问题)的更多相关文章
- HDU 3466 Proud Merchants(01背包问题)
题目链接: 传送门 Proud Merchants Time Limit: 1000MS Memory Limit: 65536K Description Recently, iSea wen ...
- HDU 1864最大报销额 01背包问题
B - 最大报销额 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- HDU 2602 Bone Collector(经典01背包问题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2602 Bone Collector Time Limit: 2000/1000 MS (Java/O ...
- HDU 2602 Bone Collector (01背包问题)
原题代号:HDU 2602 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 原题描述: Problem Description Many yea ...
- HDU 1864 最大报销额 0-1背包
HDU 1864 最大报销额 0-1背包 题意 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上, ...
- HDU 3466 Proud Merchants 带有限制的01背包问题
HDU 3466 Proud Merchants 带有限制的01背包问题 题意 最近,伊萨去了一个古老的国家.在这么长的时间里,它是世界上最富有.最强大的王国.因此,即使他们的国家不再那么富有,这个国 ...
- HDU 2546 饭卡 (01背包问题)
题意:中文的吧,飘过~ 析:学过DP的都应该感觉到是动态规划吧,就是一个01背包问题,不同的是,这个题又加入一些新的条件,就是不满5元不能消费,过了5元即使超了也行(这个学校真不错,都可以预支),最后 ...
- HDU 1864 最大报销额 (DP-01背包问题)
题意:中文题,你懂得. 析:拿过题目一看,本来以为是贪心,仔细一看不是贪心,其实是一个简单的01背包问题(DP),不过这个题的坑是在处理发票上,刚开始WA了一次. 分析一下什么样的发票是不符合要求的: ...
- 动态规划专题 01背包问题详解 HDU 2546 饭卡
我以此题为例,详细分析01背包问题,希望该题能够为大家对01背包问题的理解有所帮助,对这篇博文有什么问题可以向我提问,一同进步^_^ 饭卡 Time Limit: 5000/1000 MS (Java ...
- HDU 2602Bone Collector 01背包问题
题意:给出一个t代表有t组数据,然后给出n,n代表有n种石头,v代表旅行者的背包容量,然后给出n种石头的价值和容量大小,求能带走的最大价值 思路:01背包问题,每种石头只有拿与不拿两种状态.(其实我是 ...
随机推荐
- 微软的技术态度 -- 从其对于CRT的设计考虑说起(Thought on the CRT - What Microsoft Prefers)
很多人从C语言学习过来的人都知道,在编写程序时用到的像printf这样的函数,是作为该语言标准库函数提供的,这也是C语言标准中规定的内容.因此,操作系统必须对其保持一定程度上的透明,也就是说,作为一个 ...
- URAL 1326. Bottle Taps(简单的状压dp)
题目不太好读懂,就是先给你一个n代表要从n个物品中买东西,然后告诉你这n个东西的单位价格,在给你m个集合的情况.就是每一个结合中有x件物品.他们合起来买的价格是k.这x件物品依次是:p1--px.之后 ...
- Caused by: java.lang.NullPointerException: Attempt to write to field 'int android.app.Fragment.mNextAnim' on a null object reference
原因fragment必须先add(),才能remove(),故remove前先做判空操作 参考:http://www.cnblogs.com/hixin/p/4427276.html
- P3225 [HNOI2012]矿场搭建 tarjan割点
这个题需要发现一点规律,就是先按割点求块,然后求每个联通块中有几个割点,假如没有割点,则需要建两个出口,如果一个割点,则需要建一个出口,2个以上不用建. 题干: 题目描述 煤矿工地可以看成是由隧道连接 ...
- P4111 [HEOI2015]小Z的房间 生成树计数
这个题是生成树计数的裸题,中间构造基尔霍夫矩阵,然后构成行列式,再用高斯消元就行了.这里高斯消元有一些区别,交换两行行列式的值变号,且消元只能将一行的数 * k 之后加到别的行上. 剩下就没啥了... ...
- POJ3090 巧用欧拉函数 phi(x)
POJ3090 给定一个坐标系范围 求不同的整数方向个数 分析: 除了三个特殊方向(y轴方向 x轴方向 (1,1)方向)其他方向的最小向量表示(x,y)必然互质 所以对欧拉函数前N项求和 乘2(关于( ...
- Applications(模拟)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3705 题意:主要是分值计算要注意以下几点: (1) 在MOJ上解出的题,如 ...
- Akka源码分析-ask模式
在我之前的博文中,已经介绍过要慎用Actor的ask.这里我们要分析一下ask的源码,看看它究竟是怎么实现的. 开发时,如果要使用ask方法,必须要引入akka.pattern._,这样才能使用ask ...
- Sql批量插入方法
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- ASP.NET MVC5 之路由器
这篇博客介绍的很详细 http://www.cnblogs.com/yaozhenfa/p/asp_net_mvc_route_1.html