动态规划 洛谷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 疯狂的采药的更多相关文章

  1. 【洛谷 P1616 疯狂的采药】

    题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的 ...

  2. 洛谷 P1616 疯狂的采药【裸完全背包】

    题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的 ...

  3. 洛谷 P1616 疯狂的采药

    传送门  题目描述 Description LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他 ...

  4. 洛谷P1616 疯狂的采药【完全背包】

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

  5. 洛谷——P1616 疯狂的采药

    https://www.luogu.org/problem/show?pid=1616#sub 题目背景 此题为NOIP2005普及组第三题的疯狂版. 题目描述 LiYuxiang是个天资聪颖的孩子, ...

  6. 洛谷P1616疯狂的采药(完全背包)

    题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的 ...

  7. Java实现洛谷 P1616 疯狂的采药

    题目背景 此题为NOIP2005普及组第三题的疯狂版. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他 ...

  8. 洛谷P1616 疯狂的采药

    //完全背包 #include<bits/stdc++.h> using namespace std; ; ; int n,m,v[maxn],w[maxn],f[maxv]; int m ...

  9. P1616 疯狂的采药(洛谷,动态规划递推,完全背包)

    先上题目链接:P1616 疯狂的采药 然后放AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ...

随机推荐

  1. 【C#基础概念】元数据 metadate

    元数据是指"描述资料的资料".它被用来概述资料的基础信息,以简化查找过程与方便使用[6]. 创建资料的方法 资料的用途 创建的时间与日期 资料的创建者或作者 资料被创建在电脑网络的 ...

  2. oracle 日期改字符格式_Oracle日期类型转换格式

    转至:https://blog.csdn.net/weixin_39629269/article/details/111537468 将日期型转换成字符串时,可以按新的格式显示. 如格式YYYY-MM ...

  3. SpringMVC教程--Idea中使用Maven创建SpringMVC项目

    1.新建项目 参照idea教程中的创建maven项目https://www.cnblogs.com/daxiang2008/p/9061653.html 2.POM中加入依赖包 (1)指定版本 (2) ...

  4. 人工智能之深度学习-初始环境搭建(安装Anaconda3和TensorFlow2步骤详解)

    前言: 本篇文章主要讲解的是在学习人工智能之深度学习时所学到的知识和需要的环境配置(安装Anaconda3和TensorFlow2步骤详解),以及个人的心得体会,汇集成本篇文章,作为自己深度学习的总结 ...

  5. Tableau绘制漏斗图、甘特图、瀑布图、镶边面积图、阴影坡度图

    Tableau绘制漏斗图.甘特图.瀑布图.镶边面积图.阴影坡度图 本文首发于博客冰山一树Sankey,去博客浏览效果更好.直接右上角搜索该标题即可 一. 漏斗图 数据源 1.1 分色直条漏斗图 (1) ...

  6. JZ-066-机器人的运动范围

    机器人的运动范围 题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k ...

  7. JZ-034-第一个只出现一次的字符位置

    第一个只出现一次的字符位置 题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). ...

  8. LeetCode-046-全排列

    全排列 题目描述:给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 .你可以 按任意顺序 返回答案. 示例说明请见LeetCode官网. 来源:力扣(LeetCode) 链接:http ...

  9. Forms组件与钩子函数

    目录 一:Forms组件 1.案例需求: 2.前端 3.后端 二:form表单前后端动态交互 1.form组件 2.为什么数据效验非要去后端 不能在前端利用js直接完成呢? 3.举例:购物网站 三:基 ...

  10. tensorflow源码解析之framework-shape_inference

    目录 什么是形状推断 InferenceContext 关系图 涉及的文件 迭代记录 1. 什么是形状推断 前面我们讲到op的时候,提到了操作的注册器OpRegistry,并且提到,其中注册的数据是一 ...