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背包问题,每种石头只有拿与不拿两种状态.(其实我是 ...
随机推荐
- Cygwin与minGW
这几天关注了一下它们, 事实上我是不想安装一下vs来编写一些小东西. 本来想写个小exe,于是跑到vs的bin以下把cl与link搞出来,却发现cl还要配置什么的,也不太清楚直接就二个exe与部分dl ...
- android binder 基础实例及解析(一)【转】
本文转载自:http://blog.csdn.net/newchenxf/article/details/49359283#insertcode 原文网址(转载请注明出处): http://blog. ...
- Java 数组的 12 个方法
1. 声明一个数组 String[] aArray = new String[5]; String[] bArray = {"a","b","c&q ...
- Makefile 实际用例分析(三) ------- 是用GUN automake 处理自己的工程
前面两篇已经说过了自己怎么去为一个工程写makefile: 第一篇 第二篇 现在这一篇说的是怎么使用GNU的工具去写一个符合开源标准的Makefile呢! 首先我觉你应该参考: Automake Au ...
- bzoj2194
http://www.lydsy.com/JudgeOnline/problem.php?id=2194 卷积... 卷积并不高深,其实卷积就是两个多项式相乘的系数,但是得满足一点条件,就是f[n]= ...
- struts2里result类型Stream的参数配置
转自:https://blog.csdn.net/q714699280/article/details/51756126 contentType 内容类型,和互联网MIME标准中的规定类型一致,例如t ...
- android 中activity 属性说明(转载)
转自:http://liuwuhen.iteye.com/blog/1759796 activity是android中使用非常平凡的一种组件,我们除了需要掌握activity中的生命周期以外,还需要掌 ...
- Tempter of the Bone------剪枝
看了好多别人的 代码,最终还是 感觉 这种代码的风格适合我 下面附上代码 /* 首先 应该充满信心! 先写出来 自己的程序 然后慢慢改 , 如果是 答题思路错误的话 借鉴别人的 代码 再写 */ ...
- Fib(兔子问题)python实现多种方法
# 斐波那契数列是学计算机入门最经典的一道题目 # 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci) # ...
- ansible基础知识(二)
软件相关模块 yum yum和rpm的区别 rpm: (Redhat package manager)RPM管理支持事务机制.增强了程序安装卸载的管理. yum: YUM被称为 Yellow dog ...