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背包问题,每种石头只有拿与不拿两种状态.(其实我是 ...
随机推荐
- 模块化开发(二)--- seaJs入门学习
SeaJS是一个基于CMD模块定义规范实现一个模块系统加载器 [CMD规范](https://github.com/cmdjs/specification/blob/master/draft/mo ...
- Selenium中配置链接使用FTP服务
Enable the default report solution Step1: Create a suite listener and add codes into it, please watc ...
- Excel 常用快捷键键 快捷方式
移动整行的位置 Shift + Alt + 鼠标拖拽 不加Shit + Alt 移动后 留白 注意:需要移动鼠标到行的最上面,变成十字箭头
- 4.4系统,拍照-裁剪,resultCode返回0
问题描述: take photo -> 拍照 -> 确定 -> 截图 -> 保存,此时返回给onActivityResult的resultCode是0,截图无效.我查看图片储存 ...
- 数据库登陆失败原因: 未与信任 SQL Server 连接相关联
解决方案:用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联. 问题简述: 用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联. 说明: 执行当前 ...
- 删除".SVN"文件夹方法(转载)
转自:http://www.cnblogs.com/lr-ting/archive/2012/09/03/2666271.html 一.在linux下 删除这些目录是很简单的,命令如下 find . ...
- Unity 代码改宏定义
两个函数 PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup); //所有宏定义 ; 分割 PlayerSettings.SetS ...
- 适用于zTree 、EasyUI tree、EasyUI treegrid
#region System.Text.StringBuilder b_appline = new System.Text.StringBuilder(); Syste ...
- php三方网站使用微信公众号推送文章
//获取accesstoken 的方法public function index(){ $appId = 'wxd0e50fe967dccccc'; $appSecret = 'd7f6be12ce4 ...
- BZOJ 2506 分块
//By SiriusRen #include <bits/stdc++.h> using namespace std; ; ][],g[N],tmp=; struct Node{int ...