时间限制: 1Sec 内存限制: 128MB
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
如果你是辰辰,你能完成这个任务吗?
输入
输入第一行有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。
输出
输出一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。
样例输入
70 3
71 100
69 1
1 2
样例输出
3
提示
对于30%的数据,M <= 10;
对于全部的数据,M <= 100。
codes is loading…
使用的方法是动态规划。
问题一:动态转移方程是什么?
dp[i][j]=max{dp[i-1][j],dp[i-1][j-t[i]]+v[i]}
注:dp[i][j]表示直到第i株草药花费j时间取到的最大价值草药
t[i] v[i]分别表示采第i株草药的时间和取得的价值
问题二:当前时间减去采第i株草药的时间为负数怎么办?
一开始这种情况我并没有考虑清楚,在找bug的时候发现的。
这种情况是使用一个变量c=j-t[i],如果c<0,则直接等于dp[i-1][j]
首先定义一个数组dp,为二维数组,N行T列,分别表示总共有N种草药,T个单位时间
然后对数组dp进行初始化。
接着去找动态转移方程。如上
根据动态转移方程进行两层循环,外循环控制采到第i株,内循环控制采到第i株之前所给的时间j
直到循环结束,dp
相关知识
超越“强权就是公理”(Beyond Might Makes Right).pdf
方家河头村特色村建设规划
宠物医院企业规划
「九硕规划招聘」
宠物烹饪和膳食规划
动物旅游规划方案
宠物养护消费规划.pptx
魔兽世界怀旧服暗夜精灵猎人带什么宝宝升级
魔兽世界怀旧服wlk开转阵营吗
全球及中国宠物Omega-3补充剂行业研究及十五五规划分析报告
网址: 采药——动态规划【Right】 https://m.mcbbbk.com/newsview182072.html
上一篇: numpy+pandas+mat |
下一篇: 宠物用品,是如何掏空铲屎官钱包的 |