动态规划 洛谷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# CLR简介

     (一)CLR介绍 CLR是一个可以由多编程语言使用的运行时,CLR的核心功能:内存管理,程序集加载,安全性,异常处理,线程同步等等.可以被很多属于微软系列的开发语言使用. 事实上,在运行时,CLR根 ...

  2. Python第一讲以及计算机基础

    本周课程安排 python基础(五天) 下周课程安排 tableau图形化表制作 下下周课程安排 spss 今日内容概要 计算机发展史 计算机主要硬件 编程与编程语言 python解释器及IDE编辑器 ...

  3. 矩池云上安装ikatago及远程链接教程

    https://github.com/kinfkong/ikatago-resources/tree/master/dockerfiles 从作者的库中可以看到,该程序支持cuda9.2.cuda10 ...

  4. 学习linux(centos7)记录的笔记

    此随笔用于记录学习<linux鸟哥的私房菜>过程中1.遇到的问题及解决的过程 2.有必要记录的重要内容 3.对应书上操作的记录 开始于2021年6月18号 一个磁盘的分区通过格式化后成为一 ...

  5. tp5 缩略图自写

    1:php终端 安装扩展 使用Composer安装ThinkPHP5的图像处理类库: composer require topthink/think-image2:控制器代码: public func ...

  6. 【漏洞复现】Paraluni 安全事件分析及复现

    Paraluni 被黑分析 前言 Paraluni (平行宇宙)是新加坡 Parallel Universe 基金会发布的一个 基于币安智能链的 DeFi 项目,更多相关内容见此处.在 2022 年 ...

  7. centos7下rsync+inotify脚本实现文件同步,.NET CORE客户端文件更新后自动重启服务

    源服务器IP:192.168.8.51 目标服务器IP:192.168.8.79 安装前源服务器及目标服务器均需关闭FIREWALLD\SELINUX防火墙 sestatus | grep statu ...

  8. C/C++语言读取SEGY文件笔记(一)

    SEGY IO 推荐采用的IDE为Visual studio(VS),本文档将介绍SEGY文件的读取与写入过程,即SEGY文件的复制. 因此,新建头文件ReadSeismic.h与C++文件ReadS ...

  9. Kubernetes:Ingress总结(一)

    Blog:博客园 个人 参考:Ingress | Kubernetes.<Kubernetes进阶实战>.<Kubernetes网络权威指南 > 何谓Ingress?从字面意思 ...

  10. mybatis的几种like查询

    oracle数据库: Java代码 SELECT * FROM user WHERE name like CONCAT('%',#{name},'%') 或 Java代码 SELECT * FROM ...