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背包问题)的更多相关文章

  1. HDU 3466 Proud Merchants(01背包问题)

    题目链接: 传送门 Proud Merchants Time Limit: 1000MS     Memory Limit: 65536K Description Recently, iSea wen ...

  2. HDU 1864最大报销额 01背包问题

    B - 最大报销额 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...

  3. HDU 2602 Bone Collector(经典01背包问题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2602 Bone Collector Time Limit: 2000/1000 MS (Java/O ...

  4. HDU 2602 Bone Collector (01背包问题)

    原题代号:HDU 2602 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 原题描述: Problem Description Many yea ...

  5. HDU 1864 最大报销额 0-1背包

    HDU 1864 最大报销额 0-1背包 题意 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上, ...

  6. HDU 3466 Proud Merchants 带有限制的01背包问题

    HDU 3466 Proud Merchants 带有限制的01背包问题 题意 最近,伊萨去了一个古老的国家.在这么长的时间里,它是世界上最富有.最强大的王国.因此,即使他们的国家不再那么富有,这个国 ...

  7. HDU 2546 饭卡 (01背包问题)

    题意:中文的吧,飘过~ 析:学过DP的都应该感觉到是动态规划吧,就是一个01背包问题,不同的是,这个题又加入一些新的条件,就是不满5元不能消费,过了5元即使超了也行(这个学校真不错,都可以预支),最后 ...

  8. HDU 1864 最大报销额 (DP-01背包问题)

    题意:中文题,你懂得. 析:拿过题目一看,本来以为是贪心,仔细一看不是贪心,其实是一个简单的01背包问题(DP),不过这个题的坑是在处理发票上,刚开始WA了一次. 分析一下什么样的发票是不符合要求的: ...

  9. 动态规划专题 01背包问题详解 HDU 2546 饭卡

    我以此题为例,详细分析01背包问题,希望该题能够为大家对01背包问题的理解有所帮助,对这篇博文有什么问题可以向我提问,一同进步^_^ 饭卡 Time Limit: 5000/1000 MS (Java ...

  10. HDU 2602Bone Collector 01背包问题

    题意:给出一个t代表有t组数据,然后给出n,n代表有n种石头,v代表旅行者的背包容量,然后给出n种石头的价值和容量大小,求能带走的最大价值 思路:01背包问题,每种石头只有拿与不拿两种状态.(其实我是 ...

随机推荐

  1. 模块化开发(二)--- seaJs入门学习

    SeaJS是一个基于CMD模块定义规范实现一个模块系统加载器   [CMD规范](https://github.com/cmdjs/specification/blob/master/draft/mo ...

  2. Selenium中配置链接使用FTP服务

    Enable the default report solution Step1: Create a suite listener and add codes into it, please watc ...

  3. Excel 常用快捷键键 快捷方式

    移动整行的位置 Shift + Alt + 鼠标拖拽 不加Shit + Alt 移动后 留白 注意:需要移动鼠标到行的最上面,变成十字箭头

  4. 4.4系统,拍照-裁剪,resultCode返回0

    问题描述: take photo -> 拍照 -> 确定 -> 截图 -> 保存,此时返回给onActivityResult的resultCode是0,截图无效.我查看图片储存 ...

  5. 数据库登陆失败原因: 未与信任 SQL Server 连接相关联

    解决方案:用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联. 问题简述: 用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联. 说明: 执行当前 ...

  6. 删除".SVN"文件夹方法(转载)

    转自:http://www.cnblogs.com/lr-ting/archive/2012/09/03/2666271.html 一.在linux下  删除这些目录是很简单的,命令如下 find . ...

  7. Unity 代码改宏定义

    两个函数 PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup); //所有宏定义 ; 分割 PlayerSettings.SetS ...

  8. 适用于zTree 、EasyUI tree、EasyUI treegrid

    #region          System.Text.StringBuilder b_appline = new System.Text.StringBuilder();        Syste ...

  9. php三方网站使用微信公众号推送文章

    //获取accesstoken 的方法public function index(){ $appId = 'wxd0e50fe967dccccc'; $appSecret = 'd7f6be12ce4 ...

  10. BZOJ 2506 分块

    //By SiriusRen #include <bits/stdc++.h> using namespace std; ; ][],g[N],tmp=; struct Node{int ...