动态规划 洛谷P1616 疯狂的采药
动态规划 洛谷P1616 疯狂的采药
同样也是洛谷的动态规划一个普及-的题目,接下来分享一下我做题代码
看到题目,没很认真的看数据大小,我就提交了我的代码:
1 //动态规划 洛谷P1616 疯狂的采药
2 #include<iostream>
3 #include<cmath>
4 using namespace std;
5 int value[10005];//价值数组
6 int times[10005];//时间数组
7 int dp[10000003];//t的范围1e7
8 int main()
9 {
10 int m, t;//m是数目,t是时间
11 cin >> t >> m;
12 for (int i = 1; i <= m; ++i)
13 {
14 cin >> times[i] >> value[i];//输入数据
15 }
16 //从小遍历到大进行规划 因为这题可以选无数个一样的
17 for (int i = 1; i <= t; ++i)
18 {
19 for (int j = 1; j <= m; ++j)//对每一种草药进行遍历
20 {
21 if (i >= times[j])//前提是时间大于采摘所需要的时间才能考虑
22 {
23 dp[i] = max(dp[i], dp[i - times[j]] + value[j]);
24 }
25 }
26 }
27 cout << dp[t];
28 return 0;
29
30 }
测试了几个测试用例,过了 ,于是乎,我就自信满满的提交了!
但是!

仔细观察数据大小,经典的没开long long
于是改正:
1 //动态规划 洛谷P1616 疯狂的采药
2 #include<iostream>
3 #include<cmath>
4 using namespace std;
5 int value[10005];//价值数组
6 int times[10005];//时间数组
7 long long dp[10000003];//t的范围1e7 long long !!!!
8 int main()
9 {
10 int m, t;//m是数目,t是时间
11 cin >> t >> m;
12 for (int i = 1; i <= m; ++i)
13 {
14 cin >> times[i] >> value[i];//输入数据
15 }
16 //从小遍历到大进行规划 因为这题可以选无数个一样的
17 for (int i = 1; i <= t; ++i)
18 {
19 for (int j = 1; j <= m; ++j)//对每一种草药进行遍历
20 {
21 if (i >= times[j])//前提是时间大于采摘所需要的时间才能考虑
22 {
23 dp[i] = max(dp[i], dp[i - times[j]] + value[j]);
24 }
25 }
26 }
27 cout << dp[t];
28 return 0;
29
30 }
然后!

结束啦!
总结归纳一下: 这题和P1048 [NOIP2005 普及组] 采药 非常像,只是数据加强了些,而且我们对比可以发现,还有一个区别就是每个药可以采摘无数次。
于是我们归纳出一个模板,像只能采摘一次,也就是选择一次的背包问题,我们用采摘时间time值来做外层循环,反正每次只能选择一次,也就是拿每种草药的时间来遍历.
//也就是
for(int i=1;i<=m;++i)
{
for(int j=x(背包的最大容量),j>=time[i],--j)
{
dp[j]=max(dp[j],dp[j-time[i]]+value[i]);
}
}
但是像这一题,每次可以选择无数次,我们外层循环就只能用时间了,有点像选硬币凑钱问题。从1一直遍历到最大的time。内层去遍历每一种草药,因为可以采摘多次,得出我们的模板:
for (int i = 1; i <= t(最大时间); ++i)从小到大队每一个时间进行dp 算出每一个时间的最优解
{
for (int j = 1; j <= m(可供选择的种类数); ++j)//对每一种草药进行遍历
{
if (i >= times[j])//前提是时间大于采摘所需要的时间才能考虑
{
dp[i] = max(dp[i], dp[i - times[j]] + value[j]);
}
}
}
动态规划 洛谷P1616 疯狂的采药的更多相关文章
- 【洛谷 P1616 疯狂的采药】
题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的 ...
- 洛谷 P1616 疯狂的采药【裸完全背包】
题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的 ...
- 洛谷 P1616 疯狂的采药
传送门 题目描述 Description LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他 ...
- 洛谷P1616 疯狂的采药【完全背包】
题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说 ...
- 洛谷——P1616 疯狂的采药
https://www.luogu.org/problem/show?pid=1616#sub 题目背景 此题为NOIP2005普及组第三题的疯狂版. 题目描述 LiYuxiang是个天资聪颖的孩子, ...
- 洛谷P1616疯狂的采药(完全背包)
题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的 ...
- Java实现洛谷 P1616 疯狂的采药
题目背景 此题为NOIP2005普及组第三题的疯狂版. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他 ...
- 洛谷P1616 疯狂的采药
//完全背包 #include<bits/stdc++.h> using namespace std; ; ; int n,m,v[maxn],w[maxn],f[maxv]; int m ...
- P1616 疯狂的采药(洛谷,动态规划递推,完全背包)
先上题目链接:P1616 疯狂的采药 然后放AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ...
随机推荐
- Java课程设计---项目数据库设计(含实体类)
1.表设计 (1)新建表tb_student(学生表) (2)新建表tb_admin(管理员表) (3)新建表tb_teacher(教师表) (4)新建表tb_course(课程表) (5)新建表tb ...
- startActivityForResult跳转后回调数据
从AActivity向BActivity跳转后,关闭BActivity并向AActivity回调一些数据: 建立AActivity.java文件: 1 public class AActivity e ...
- random_sample() takes at most 1 positional argument (2 given)
是random模块下的sample函数,而不是np.random.
- Scrapy(六):Spider
总结自:Spiders - Scrapy 2.5.0 documentation Spider 1.综述 ①在回调函数Parse及其他自写的回调函数中,必须返回Item对象.Request对象.或前两 ...
- Laravel-多条件检索方案
控制器 public function index(Request $request) { $status = $request->input('status'); $title = $requ ...
- redis php使用实例
redis的操作很多的,以前看到一个比较全的博客,但是现在找不到了.查个东西搜半天,下面整理一下php处理redis的例子,个人觉得常用一些例子.下面的例子都是基于php-redis这个扩展的. 1, ...
- 6张图为你分析Kafka Producer 消息缓存模型
摘要:发送消息的时候, 当Broker挂掉了,消息体还能写入到消息缓存中吗? 本文分享自华为云社区<图解Kafka Producer 消息缓存模型>,作者:石臻臻的杂货铺. 在阅读本文之前 ...
- SqlServer Split 的实现
数据库如何处理传参用指定字符隔开参数的情况 如"name1,name3,name5" 共2种方式, 1.数据库内置函数STRING_SPLIT(sql2016之前的版本不支持该函数 ...
- Arcgis 离线部署api 4.x的两种本地部署方法!
引言:本文用的是api4.6版本 方法一 拷贝api进去tomcat服务器用绝对地址引用 首先将下载好的api放入Tomcat服务中的Webapp下: 1 可以打开下载好的的 api46/arcg ...
- 2、DTO(数据传输对象)
DTO:Data Transfer Object 即数据传输对象. 有些人会问这个DTO是干嘛的,不是已经有了Model实体类了么? 首先说一下,DTO是干嘛了.DTO的引入,应该说是伴随着分层架构设 ...