问题 A: 【动态规划】采药

时间限制: 1 Sec  内存限制: 64 MB
提交: 35  解决: 15
[提交][状态][讨论版]

题目描述

山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值,在一段时间内如何让采到的草药价值最大。

输入

第一行有两个用空格隔开的整数T和M(1≤T,M≤100),T代表总共采药时间,M代表草药数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某种草药的时间和这株草药的价值。

输出

只包含一个整数,表示在规定的时间内可以采到的草药的最大总价值。

样例输入

70 3
71 100
69 1
1 2

样例输出

3

解题思路:实际就是01背包,用二维数组的时候注意:需要考虑j<t[i]的情况,因为后面会有用到dp[i-1][j-t[i]] (j<t[i])的情况。  所以还是学着用一维数组做01背包吧,既节省空间有不用考虑这么多情况。代码:二维数组:
#include<cstdio>
#include <iostream>
#include <cstring>using namespace std;int dp[1005][1005];int main(){int T;int M;int maxx=0;int t[1111];int p[1111];while(scanf("%d %d",&T,&M)!=EOF){maxx=0;memset(dp,0,sizeof(dp));for(int i=1;i<=M;i++){scanf("%d %d",&t[i],&p[i]);}for(int i=1;i<=M;i++){for(int j=1;j<=T;j++){if(j>=t[i]){dp[i][j]=max(dp[i-1][j],dp[i-1][j-t[i]]+p[i]);}else{dp[i][j]=dp[i-1][j];}}}printf("%d\n",dp[M][T]);}return 0;
}

一维数组:
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4
 5 using namespace std;
 6
 7 int a[1005]={0};
 8 int t[1005]={0};
 9 int p[1005]={0};
10
11 void zeroonepack(int T,int t,int p){
12     for(int i=T;i>=t;i--){
13         a[i]=max(a[i],a[i-t]+p);
14     }
15 }
16
17 int main()
18 {
19     int T,M;
20     while(scanf("%d %d",&T,&M)!=EOF){
21         memset(a,0,sizeof(a));
22         for(int i=0;i<M;i++){
23            scanf("%d %d",&t[i],&p[i]);
24         }
25         for(int i=0;i<M;i++){
26             zeroonepack(T,t[i],p[i]);
27         }
28         printf("%d\n",a[T]);
29     }
30     return 0;
31 }


转载于:https://www.cnblogs.com/TWS-YIFEI/p/5773718.html

问题 A: 【动态规划】采药_二维数组_一维数组相关推荐

  1. 关于图的二维矩阵转为一维数组的理解。

    一开始看二维矩阵转为一维数组的时候还是有点懵的,为啥是N(N+1)/2呢,为啥不是N*N/2呢,这个矩阵明明是N*N的一个正方形啊,我要省一半空间直接除2不就行了,带着这个问题我观察了一下这个PPT里 ...

  2. 建立二维数组_二维数组的 DP

    寻找不同路径和 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标 ...

  3. map的key可以试一个数组吗?_二维数组的 DP

    寻找不同路径和 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标 ...

  4. C# 传递数组参数_一维数组_二维数组

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. vba二维数组初始化_将二维数组转为一维数组的2种方法

    如何将下面的二维数组转为一维数组. $msg = array( array( 'id'=>'45', 'name'=>'jack' ), array( 'id'=>'34', 'na ...

  6. python初始化一个二维数组_二维数组初始化

    对于一个M行N列的二维数组,可以看成是M行一维数组,一维数组是N列.例如 int array[3][2]; 是一个3行2列的二维数组,其实,如同3个一维数组,一维数组是2列.那么,对3行2列的二维数组 ...

  7. python随机生成二维列表_对python产生随机的二维数组实例详解

    对python产生随机的二维数组实例详解 最近找遍了python的各个函数发现无法直接生成随机的二维数组,其中包括random()相关的各种方法,都没有得到想要的结果.最后在一篇博客中受到启发,通过列 ...

  8. python定义二维数组_二维数组的定义、初始化和输出,C语言二维数组详解

    本节学习二维数组.二维数组与一维数组相似,但是用法上要比一维数组复杂一点.后面的编程中,二维数组用得很少,因为二维数组的本质就是一维数组,只不过形式上是二维的.能用二维数组解决的问题用一维数组也能解决 ...

  9. 代码随想录算法训练营第42天 | 动态规划 part04 ● 背包问题二维● 背包问题滚动数组 一维 ● 416. 分割等和子集

    # 二维dp数组,01背包 1.确定dp数组以及下标的含义 dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少. 2.  gpt 解决我的困惑 3.  另外 ...

  10. HDU2642(二维的树状数组)

    二维的树状数组,我记得是模版!^ _ ^ 题意很清楚:就是这部分的原理:sum(x1,y1)+sum(x2-1,y2-1)-sum(x1,y2-1)-sum(x2-1,y1);其实可以和概率论中的一个 ...

最新文章

  1. 阿里云数据中台全新产品DataTrust聚焦企业数据安全保障
  2. SAP CRM Fiori My Opportunity应用文件上传的技术实现
  3. 《剑指offer》全解(图文结合,通俗易懂,一篇看爽)
  4. bat执行exe程序_dos命令start教程,并行运行exe程序或者启动bat批处理cmd脚本
  5. python分析BOSS直聘的某个招聘岗位数据
  6. CVE-2020-1472 | Netlogon 特权提升漏洞预警
  7. 2016年4月11日作业
  8. Atitit.收银系统模块架构attilax 总结
  9. 手把手教你Tiny4412 Android5.0 定制 按下开发板上的按键通过广播发送到应用层
  10. Struts2 通配符不能使用问题
  11. NOI 2017 滚粗记
  12. 2018 中国人口研究,净增长500多万人。5年后注定人口负增长
  13. html播放mov格式视频,jQuery及video标签视频播放弹窗插件支持mp4,mov等格式详解(图文)...
  14. 关于PS中RGB和CMYK的区别
  15. MRCTF 2020-“TiKi小组”
  16. 32款网页设计和网页开发人员常用的Google chrome浏览器扩展程序
  17. 百度AI达人创造营|第一课、拍案叫绝的创意
  18. Python Numpy练习(一)
  19. 数字图像处理:第十四章 图象压缩
  20. 无人机入门(一)位置与电机速度控制

热门文章

  1. UVAPOJ离散概率与数学期望入门练习[4]
  2. msp单片机UCS配置
  3. Qt之QToolButton
  4. 用户体验设计答疑对话(半吊子和纯外行
  5. 十字路口待转区什么用_左转待转区,到底怎样掉头?
  6. redis简述及安装
  7. YARN的服务库和事件库
  8. kafka基础之介绍和分布式集群搭建
  9. (36)Verilog HDL关系运算:大于、小于、等于
  10. python计算机图形学_图形图像学习随笔:计算机图形学的一些基本概念