问题 A: 【动态规划】采药_二维数组_一维数组
问题 A: 【动态规划】采药
时间限制: 1 Sec 内存限制: 64 MB
提交: 35 解决: 15
[提交][状态][讨论版]
题目描述
输入
输出
样例输入
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: 【动态规划】采药_二维数组_一维数组相关推荐
- 关于图的二维矩阵转为一维数组的理解。
一开始看二维矩阵转为一维数组的时候还是有点懵的,为啥是N(N+1)/2呢,为啥不是N*N/2呢,这个矩阵明明是N*N的一个正方形啊,我要省一半空间直接除2不就行了,带着这个问题我观察了一下这个PPT里 ...
- 建立二维数组_二维数组的 DP
寻找不同路径和 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标 ...
- map的key可以试一个数组吗?_二维数组的 DP
寻找不同路径和 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标 ...
- C# 传递数组参数_一维数组_二维数组
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- vba二维数组初始化_将二维数组转为一维数组的2种方法
如何将下面的二维数组转为一维数组. $msg = array( array( 'id'=>'45', 'name'=>'jack' ), array( 'id'=>'34', 'na ...
- python初始化一个二维数组_二维数组初始化
对于一个M行N列的二维数组,可以看成是M行一维数组,一维数组是N列.例如 int array[3][2]; 是一个3行2列的二维数组,其实,如同3个一维数组,一维数组是2列.那么,对3行2列的二维数组 ...
- python随机生成二维列表_对python产生随机的二维数组实例详解
对python产生随机的二维数组实例详解 最近找遍了python的各个函数发现无法直接生成随机的二维数组,其中包括random()相关的各种方法,都没有得到想要的结果.最后在一篇博客中受到启发,通过列 ...
- python定义二维数组_二维数组的定义、初始化和输出,C语言二维数组详解
本节学习二维数组.二维数组与一维数组相似,但是用法上要比一维数组复杂一点.后面的编程中,二维数组用得很少,因为二维数组的本质就是一维数组,只不过形式上是二维的.能用二维数组解决的问题用一维数组也能解决 ...
- 代码随想录算法训练营第42天 | 动态规划 part04 ● 背包问题二维● 背包问题滚动数组 一维 ● 416. 分割等和子集
# 二维dp数组,01背包 1.确定dp数组以及下标的含义 dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少. 2. gpt 解决我的困惑 3. 另外 ...
- HDU2642(二维的树状数组)
二维的树状数组,我记得是模版!^ _ ^ 题意很清楚:就是这部分的原理:sum(x1,y1)+sum(x2-1,y2-1)-sum(x1,y2-1)-sum(x2-1,y1);其实可以和概率论中的一个 ...
最新文章
- 阿里云数据中台全新产品DataTrust聚焦企业数据安全保障
- SAP CRM Fiori My Opportunity应用文件上传的技术实现
- 《剑指offer》全解(图文结合,通俗易懂,一篇看爽)
- bat执行exe程序_dos命令start教程,并行运行exe程序或者启动bat批处理cmd脚本
- python分析BOSS直聘的某个招聘岗位数据
- CVE-2020-1472 | Netlogon 特权提升漏洞预警
- 2016年4月11日作业
- Atitit.收银系统模块架构attilax 总结
- 手把手教你Tiny4412 Android5.0 定制 按下开发板上的按键通过广播发送到应用层
- Struts2 通配符不能使用问题
- NOI 2017 滚粗记
- 2018 中国人口研究,净增长500多万人。5年后注定人口负增长
- html播放mov格式视频,jQuery及video标签视频播放弹窗插件支持mp4,mov等格式详解(图文)...
- 关于PS中RGB和CMYK的区别
- MRCTF 2020-“TiKi小组”
- 32款网页设计和网页开发人员常用的Google chrome浏览器扩展程序
- 百度AI达人创造营|第一课、拍案叫绝的创意
- Python Numpy练习(一)
- 数字图像处理:第十四章 图象压缩
- 无人机入门(一)位置与电机速度控制