题目OJ地址

https://www.luogu.org/problemnew/show/P1048

https://vijos.org/p/1104

题目描述
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。
医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,
这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,
在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”

如果你是辰辰,你能完成这个任务吗?

输入输出格式
输入格式:
第一行有2个整数T(1≤T≤1000)和M(1≤M≤100),用一个空格隔开,T代表总共能够用来采药的时间,
M代表山洞里的草药的数目。
接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。
输出格式:
1个整数,表示在规定的时间内可以采到的草药的最大总价值。
输入输出样例
输入样例#1:
70 3
71 100
69 1
1 2
输出样例#1:
3
说明
对于30%的数据,M≤10;
对于全部的数据,M≤100。

算法分析:

经典的01背包动态规划问题,具体分析参考https://www.cnblogs.com/jiangjun/archive/2012/05/08/2489590.html

在这里,我们将M种草药编号1~M,定义dp[i][j]为“从前i种草药选择若干种去采摘,花费时间不超过j,所能得到的最大价值”。那么,状态转移方程如下:

dp[i][j]= max(   dp[i-1][j] ,  dp[i-1][j-w[i] ]+v[i]  )

意思是:

在考虑从前i种草药选择若干种去采摘时有两种策略:

(一)不选第i种草药,那么应该有dp[i][j]=dp[i-1][j]

(二)选择第i种草药,那么dp[i][j]=dp[i-1][j-w[i]]+v[i]

为了获得最终的最大价价值,dp[i][j]应去此两者较大值。

代码如下:

 #include <stdio.h>
int dp[][]={},T,M,w[]={},v[]={};
int max2(int a,int b)
{ return a>b?a:b; }
void fun()
{
int i,j;
for(i=;i<=M;i++)
{
for(j=;j<=T;j++)
{
if(j>=w[i]) dp[i][j]=max2(dp[i-][j],dp[i-][j-w[i]]+v[i]);
else dp[i][j]=dp[i-][j];
}
}
}
int main()
{
int i; scanf("%d%d",&T,&M);
for(i=;i<=M;i++)
scanf("%d%d",&w[i],&v[i]);
fun();
printf("%d\n",dp[M][T]);
return ;
}

洛谷P1048 采药的更多相关文章

  1. 洛谷 P1048 采药【裸01背包】

    题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:" ...

  2. 洛谷 P1048 采药

    采药 01背包模板题. #include <iostream> #include <cstdio> using namespace std; //Mystery_Sky //一 ...

  3. 洛谷P1048 采药 二维dp化一维

    题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个 ...

  4. 洛谷P1048采药题解

    题目 这是一个裸的01背包,因为题目中没说可以采好多次,不多说上代码, #include<iostream> using namespace std; int main() { int n ...

  5. 洛谷P1048采药

    这道题一看就知道是01背包,我门用f[i]来表示时间剩余i时的最大的价值 一共只有两种选择取或者不取,可以得到方程式f[i]=max(f[i],f[i-a[i]]+v[i])(a[i]是表示时间,v[ ...

  6. 动态规划 洛谷P1048 [NOIP2005 普及组] 采药

    洛谷P1048 [NOIP2005 普及组] 采药 洛谷的一个谱架-的题目,考的是01背包问题,接下来分享一下我的题解代码. AC通过图: 我的代码: 1 //动态规划 洛谷P1048 [NOIP20 ...

  7. P1048 采药(洛谷,动态规划递推,01背包原题)

    题目直接放链接 P1048 采药 这题只是01背包+背景故事而已 原题来的 PS:我写了一篇很详细的01背包说明,如果下面ac代码有看不懂的地方可以去看看 对01背包的分析与理解(图文) 下面上ac代 ...

  8. 动态规划 洛谷P1616 疯狂的采药

    动态规划 洛谷P1616 疯狂的采药 同样也是洛谷的动态规划一个普及-的题目,接下来分享一下我做题代码 看到题目,没很认真的看数据大小,我就提交了我的代码: 1 //动态规划 洛谷P1616 疯狂的采 ...

  9. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

随机推荐

  1. OpenJ_Bailian 4017 爬楼梯

    时间限制: 1000 ms  空间限制: 262144 KB 题目描述 树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数.例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一 ...

  2. servlet生命周期和工作原理

    http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html

  3. PostgreSQL 的命令行工具 psql 的常用命令

    1. 连接服务器: psql -h 192.168.1.88 -U username -d databasename 2. 切换数据库: \c dbname 3. 列出所有数据库: \l 4. 列出所 ...

  4. 我与Vuex的第一次邂逅

    new Vue({ // state data () { return { count: 0 } }, // view template: ` <div>{{ count }}</d ...

  5. windows系统 webstorm安装zencoding方法

    今天在webstorm安装zencoding,下载地址:http://code.google.com/p/zen-coding/downloads/list,下载以下文件: WebIDE and In ...

  6. jmeter正则表达式提取器提取特定字符串后的全部内容

    jmeter进行JDBC请求时,请求后的响应结果在传递给下一个请求使用时,需要用到关联,也在jmeter中,关联通过正则表达式提取器实现. 但是,在JDBC请求后的响应结果中,往往需要关联的内容是只有 ...

  7. 如何在ElementUI中的Table控件中使用拼音进行排序

    本人使用版本是1.4.7 在这个版本中对应全是String的column进行排序并不是按照拼音的方式排列的. 这里我贴一下源代码就可以看出是为什么了: export const orderBy = f ...

  8. 3ds max学习笔记(七)-- 实例操作(桌子)

    首先[自定义]/[单位设置],将公制和系统的单位都设置成mm(毫米) 若软件右侧无[标准基本体]那么可以选择[创建]/标准基本体/扩展基本体.... 1.创建一个长方体(作为桌面)完成后,点击菜单栏[ ...

  9. Vue(十八)Element UI

    Elment UI 1. 简介 Element UI是饿了么团队提供的一套基于Vue2.0的组件库,可以快速搭建网站,提高开发效率 ElementUI PC端 MintUI 移动端 [官网](http ...

  10. Vue相关开源项目库汇总(史上最全)

    偶尔在网上看到的,先保存着,以备不时之需 https://www.jianshu.com/p/e37f4dde49a2 better-scroll:是一款重点解决移动端(未来可能会考虑 PC 端)各种 ...