NOIP2005普及组第3题 采药 (背包问题)

NOIP2005普及组第3题 采药   

时间限制: 1 Sec  内存限制: 128 MB
提交: 50  解决: 23
[提交][状态][讨论版][命题人:外部导入]

题目描述

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

 

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

输入

第一行有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。

输出

包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。

 

 

【数据规模】

 

 

 

对于30%的数据,M <= 10;

 

对于全部的数据,M <= 100。

 

 

样例输入

70 3
71 100
69 1
1 2

样例输出

3

题目的要求是用有限的时间获取价值尽可能高的草药,所以可以用01背包来做。

可以假设采药时的最优解是在时间T内i棵,用c(i,T)表示,此时这个解要么包含i这棵草药,要么不包含,假设采这颗草药的时间为T1,价值为V,如果包含,这个最优解变成了c(i-1,T-T1)+V,如果不包含,这个最优解变成了c(i-1,T),这时只要判断c(i-1,T-T1)+V和c(i-1,T)哪个价值更大,哪个就是最优解,即c(i,T)=max(c(i-1,T-T1)+V,c(i-1,T))。

现在令第j个草药的价值为v[j],采这个草药的时间为ti[j]i时的价值为h[i],则有h[i]=max(h[i-1],h[i-ti[j]]+v[j])。而h[0]为0,我们就得到了最优解的递推公式。代码如下:

 

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
int dp[1005];
int v[105],w[105];
int main()
{int t,n;int i;cin>>t>>n;for(i=1;i<=n;i++)cin>>w[i]>>v[i];memset(dp,0,sizeof(0));for(i=1;i<=n;i++){for(int j=t;j>=w[i];j--){dp[j]=max(dp[j],dp[j-w[i]]+v[i]);}}cout<<dp[t];return 0;
}

 

 

转载于:https://www.cnblogs.com/caiyishuai/p/8577007.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端面试之Vue相关总结

Vue2中检测数组变化的限制和解决方法 vue2用下标设置数组没效果 arr [1,2] arr[0] 0,页面上显示的arr并没有修改(如果对应下标是原始值&#xff1b;若是引用值)解决1&#xff1a;Vue.Set解决2&#xff1a;arr.splice (Vue会劫持splice方法) Vue2对对象是循环defineProperty…

JS和安卓 IOS的交互 例子式记录

(function () { var u navigator.userAgent; var isAndroid u.indexOf(Android) > -1 || u.indexOf(Adr) > -1; //android终端 var isiOS !!u.match(/\(i[^;];( U;)? CPU.Mac OS X/); if(isAndroid){ (function(){ function android_i…

vue --- ref属性获取dom元素和子组件的方法

说明: // 假设login的组件定义如下: Vue.component(login, {template:<h1>登录</h1>,data(){return {msg:son msg,}},methods(){show(){console.log(调用子组件的方法);}} }) // 在父元素中使用 <div id"app"><login ref"myLogin"&g…

【工程师综合项目二】React + Koa2打造『JS++官网管理后台』

Redis认知、安装与操作 MongoDB&#xff1a;动态数据库&#xff0c;如游戏中需要频繁地保存人物的坐标 Oracle&#xff1a;收费&#xff0c;企业级 mac要安装homebrew&#xff08;包管理工具&#xff09; window安装Redis程序运行教程 命令行Redis操作 启动&#xff1a; redis-…

webpack --- html-webpack-plugin

安装 cnpm i html-webpack-plugin -D配置 (webpack.config.js) // webpack 是基于node构建的,webpack的配置文件中,任何合法的Node代码都是支持的 var path require(path)// 在内存中生成src下的index.html,同时自动将打包好的bundle.js 导入到页面中 var htmlWebpackPlugin…

nyoj164——卡特兰数(待填坑)

题意&#xff1a;将1~2n个数按照顺时针排列好&#xff0c;用一条线将两个数字连接起来要求&#xff1a;线之间不能有交点&#xff0c;同一个点只允许被连一次。 最后问给出一个n&#xff0c;有多少种方式满足条件。 卡特兰数&#xff08;列&#xff09;&#xff1a; 令h(0)1,h(…

git 使用

1. 先进入项目文件夹&#xff0c;通过命令 git init 把这个目录变成git可以管理的仓库 git init 2. 把文件添加到版本库中&#xff0c;使用命令 git add .添加到暂存区里面去&#xff0c;不要忘记后面的小数点“.”&#xff0c;意为添加文件夹下的所有文件 git add . 3. 用命令…

webpack --- 使用vue

// webpack中如何使用 vue: // 1. 安装vue 的包: cnpm i vue -S // 2. 由于在 webpack 中,推荐使用 . vue 这个组件模板文件定义组件, 所以需要安装能解析这种文件的loader cnpm i vue-loader vue-template-compiler -D // 3. 在main.js 中导入 vue的包, import Vue from vue…

ES6杂碎

1、let声明的变量没有变量提升&#xff1b; 2、const声明的变量&#xff1a;块级作用域内有效&#xff0c;存在暂时性死区&#xff0c;变量指向的那个内存地址不得改动&#xff1b; 3、...tail解构出来的是数组或空数组 let [head, ...tail] [1, 2, 3, 4]; head //1 tail //[2…

koa --- 自制简易的koa-router

打算自己写一个简单的Router类,来实现koa-router这个中间件的(部分)神奇功能 确定需求 1.首先导入需要在app.js里面导入自己写的Router类 2.然后是使用的方式和挂载router的方式 // 导入Router类 const Router require(./components/router.js);// 使用方式,(暂时只对get请…

MariaDB 脚本

研究MariaDB&#xff0c; 需要mock up一些假数据&#xff1a; 生成n个长度整型数的函数rand_num&#xff1a; CREATE DEFINERrootlocalhost FUNCTION rand_num(n INT) RETURNS int(5) begin DECLARE i INT DEFAULT 0; DECLARE result INT DEFAULT 0; WHILE i < n DOSET re…

Promise的基本使用

利用Promise是解决JS异步执行时候回调函数嵌套回调函数的问题&#xff0c; 更简洁地控制函数执行流程&#xff1b; 通过new实例化Promise&#xff0c; 构造函数需要两个参数&#xff0c; 第一个参数为函数执行成功以后执行的函数resolve&#xff0c; 第二个函数为函数执行失败…

软工作业PSP与单元测试训练

一、实现模块判断传入的身份证号码的正确性&#xff1b; 二、针对所实现的模块编写对应的单元测试代码&#xff1b; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; import java.u…

koa --- nunjucks

安装: npm install koa-nunjucks-2 --save目录结构 |--- controller/ | |--- home.js |--- service/ | |--- home.js |--- views/ |--- app.js |--- router.jsapp.js // (部分) const nunjucks require(koa-nunjucks-2); app.use(nunjucks({ext: html,path: path.joi…

DNN模型训练词向量原理

转自&#xff1a;https://blog.csdn.net/fendouaini/article/details/79821852 1 词向量 在NLP里&#xff0c;最细的粒度是词语&#xff0c;由词语再组成句子&#xff0c;段落&#xff0c;文章。所以处理NLP问题时&#xff0c;怎么合理的表示词语就成了NLP领域中最先需要解决的…

天平称重【递归解法】

用天平称重时&#xff0c;我们希望用尽可能少的砝码组合称出尽可能多的重量。如果只有5个砝码&#xff0c;重量分别是1&#xff0c;3&#xff0c;9&#xff0c;27&#xff0c;81则它们可以组合称出1到121之间任意整数重量&#xff08;砝码允许放在左右两个盘中&#xff09;。 本…

算法 --- reduce的使用.

描述: 难点: 将[[‘a’,‘b’,‘c’],[‘d’,‘e’,‘f’]]输出为[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]. 关键代码描述: 1.假设我们已经根据输入的数字得到了 rawArr [[‘a’,‘b’,‘c’],[‘d’,‘e’,‘f’]] 2. 下一步将rawArr[0…

SpringBoot、mysql配置PageHelper插件

一&#xff1a;https://blog.csdn.net/h985161183/article/details/79800737 主要异常&#xff1a;org.springframework.beans.factory.BeanCreationException: Error creating bean with name com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration: pageHelper.…

字符串的拆分以及分隔符所在不同位置的删除

try { //根据imComuserGroupMng获取这个数据库的所有ImComuserGroup数据 List<ImComuserGroup> list imComuserGroupMng.findAllComuserGroup(); //便利实体数据list为数据的集合 …

算法 --- 递归生成括号

问题描述 思路: 1.首先生成n个括号 2.左括号数量(记为l)不超过n 3.右括号数量(记为r)不超过n,且优先生成左括号(即 l < r) 4.需要设计一个递归式h(str,l,r) // 一开始,str , l 0, r 0 // 第一步进去,添加左括号, str(, l 1, r 0 // 然后因为 l < n . r < l 所以…