动态规划 洛谷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. idea maven: invalid class root

    maven导入依赖没有问题,但是项目lib的类飘红,实际导入的类中有一些没有,这是idea的问题,重启idea,发现需要重新导入项目,重新导入后问题解决. 原因:可能之前误删了项目中idea的一些文件 ...

  2. k-NN——算法实现

    k-NN 没有特别的训练过程,给定训练集,标签,k,计算待预测特征到训练集的所有距离,选取前k个距离最小的训练集,k个中标签最多的为预测标签 约会类型分类.手写数字识别分类 计算输入数据到每一个训练数 ...

  3. MySQL Community Server安装

    MySQL Community Server安装 下载地址:https://dev.mysql.com/downloads/mysql/,zip安装,解压缩之后其实就可以用了,但是要进行配置. 1,解 ...

  4. Linux 组网入门(转)

    转至:https://blog.csdn.net/cuijiao1893/article/details/100397875 Linux 组网入门(转)[@more@]WEB 服务器 现在在Inter ...

  5. -bash: ./1.sh: /bin/bash^M: bad interpreter: No such file or directory

    1.开始以为是sh路径问题,用which查看是正确的. 2.用vim打开文件:vi 文件名. 3.按':'号键,输入查看文件的格式命令set ff或set fileformat. 4.可以看到格式是D ...

  6. 判断访问类型是pc端还是移动端

    /**      * 判断访问类型是电脑还是手机      */     $(function(){         var mobile_flag = isMobile(); // true为PC端 ...

  7. 哈工大 计算机系统 大作业 程序人生-Hello’s P2P

    计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算机 学 号 班 级 学 生 指 导 教 师 计算机科学与技术学院 2021年6月 摘 要 本文主要通过分析hello这个程序的 ...

  8. Windows11中如何使用旧版本IE浏览器打开网页

    Windows11删除了旧版本IE浏览器,完全采用了Edge,但是我们进行网站测试时有时仍会用到IE浏览器,那么可以按照以下步骤启用: 1.进入Edge浏览器中,打开设置,进入默认浏览器选项下: 修改 ...

  9. JavaScript面向对象—继承的实现

    JavaScript面向对象-继承的实现 前言 面向对象的三大特性:封装.继承和多态.上一篇我们简单的了解了封装的过程,也就是把对象的属性和方法封装到一个函数中,这一篇讲一下JavaScript中继承 ...

  10. PHP 的网站主要攻击方式有哪些?

    1.命令注入(Command Injection)2.eval 注入(Eval Injection)3.客户端脚本攻击(Script Insertion)4.跨网站脚本攻击(Cross Site Sc ...