P1759 通天之潜水(双写法+解析)
算法解析
动态规划问题满足三大重要性质
最优子结构性质:如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索。
子问题重叠性质:子问题重叠性质是指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在表格中简单地查看一下结果,从而获得较高的效率。
无后效性:将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。换句话说,每个状态都是过去历史的一个完整总结。这就是无后向性,又称为无后效性。
P1759 通天之潜水
题目
在猴王的帮助下,小A终于走出了这篇荒山,却发现一条波涛汹涌的河拦在了自己的面前。河面上并没有船,但好在小A有\(n\)个潜水工具。由于他还要背重重的背包,所以他只能背\(m\)重的工具,又因为他的力气并不是无限的,河却很宽,所以他只能背有\(v\)阻力的工具。但是这条河下有非常重要的数据,所以他希望能够停留的时间最久。于是他找到了你,让你告诉他方案。
输入
三个数\(m,v,n\)如题目所说
接下来n行,每行三个数\(ai,bi,ci\)分别表示所含的重力,阻力,能够支撑的时间
输出
第一行一个数,表示最长的时间
接下来一行,若干个数,表示所选的物品
样例
100 100 3 405
50 60 289 1 2
40 10 116
50 50 106
解析
刚开始看的时候还行,看到要输出所选的物品的时候呆了,想到两种方法
\(First\)是用f[i][j]算最大时间,用三维数组p[i][j][k]表示 第\(i\)个物品在有\(j\)重力\(k\)阻力时是否选这个工具,顺着数组递归输出选的工具
\(Second\)是用DFS 应为数据比较小,不用剪枝也可以过
代码
//第一组
#include <bits/stdc++.h>
#define N 10005
using namespace std;
int f[N][N];
int w[N],v[N],t[N];
bool p[105][205][205];
void print(int date,int m,int s){
if (date==1){
if (p[date][m][s]==true)
printf("1 ");
return;
}else if (p[date][m][s]==true){
print(date-1,m-w[date],s-v[date]);
printf("%d ",date);
}else {
print(date-1,m,s);
}return;
}
int main(){
int m,s,n;
scanf("%d%d%d",&m,&s,&n);
f[0][0]=0;
for (int i=1;i<=n;i++){
scanf("%d%d%d",&w[i],&v[i],&t[i]);
}
for (int l=1;l<=n;l++){
for (int i=m;i>=w[l];i--){
for (int j=s;j>=v[l];j--){
if (f[i][j]<f[i-w[l]][j-v[l]]+t[l]){
f[i][j]=f[i-w[l]][j-v[l]]+t[l];
p[l][i][j]=true;
}
}
}
}
printf("%d\n",f[m][s]);
print(n,m,s);
return 0;
}
———————————————————————————一点也不美丽的华丽分割线———————————————————————————————
//第二个
#include <bits/stdc++.h>
using namespace std;
int m,v,n,a[105],b[105],c[105];
int ans,r[105],cs[105],cho;
void dfs(int Nans,int date,int m,int v,int h){
if (m<0||v<0)return;
if (Nans>ans){
ans=Nans;cho=h;
for (int i=1;i<=h;i++)
r[i]=cs[i];
}
if (date>n)return;//当date==n+1时r[i]还没有把cs[i]的都记录下来,要等记录完在return,所以放到下面
cs[h+1]=date;
dfs(Nans+c[date],date+1,m-a[date],v-b[date],h+1);
dfs(Nans,date+1,m,v,h);
return;
}
int main(){
scanf("%d%d%d",&m,&v,&n);
for (int i=1;i<=n;i++){
scanf("%d%d%d",&a[i],&b[i],&c[i]);
}
dfs(0,1,m,v,0);
printf("%d\n",ans);
for(int i=1;i<=cho;i++)
printf("%d ",r[i]);
return 0;
}
P1759 通天之潜水(双写法+解析)的更多相关文章
- 洛谷 P1759 通天之潜水
P1759 通天之潜水 19通过 65提交 题目提供者lych 标签动态规划洛谷原创 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目背景 直达通天路·小A历险记第三篇 题目 ...
- 洛谷——P1759 通天之潜水
P1759 通天之潜水 题目背景 直达通天路·小A历险记第三篇 题目描述 在猴王的帮助下,小A终于走出了这篇荒山,却发现一条波涛汹涌的河拦在了自己的面前.河面上并没有船,但好在小A有n个潜水工具. ...
- 洛谷P1759 通天之潜水
题目背景 直达通天路·小A历险记第三篇 题目描述 在猴王的帮助下,小A终于走出了这篇荒山,却发现一条波涛汹涌的河拦在了自己的面前.河面上并没有船,但好在小A有n个潜水工具.由于他还要背重重的背包,所以 ...
- luogu P1759 通天之潜水
题目背景 直达通天路·小A历险记第三篇 题目描述 在猴王的帮助下,小A终于走出了这篇荒山,却发现一条波涛汹涌的河拦在了自己的面前.河面上并没有船,但好在小A有n个潜水工具.由于他还要背重重的背包,所以 ...
- P1759 通天之潜水(不详细,勿看)(动态规划递推,组合背包,洛谷)
题目链接:点击进入 题目分析: 简单的组合背包模板题,但是递推的同时要刷新这种情况使用了哪些物品 ac代码: #include<bits/stdc++.h> using namespace ...
- springboot配置双视图解析器
因项目要求,需要同时支持html和jsp页面,所以在springboot的基础上配置双视图解析器. 重点在于,抛开原来的resources目录结构层,这层只放application.propertie ...
- 关于PHP单双引号解析变量的问题
双引号可以解析变量,单引号不行 $qweqwe = 123; echo "$qweqwe"; 输出123 echo '$qweqqwe'; 输出$qweqwe
- Mybatis 条件判断单双引号解析问题
最近使用 Mybatis 遇到了一个奇怪的问题,前端传了一个数字字符串(type = "1") ,我做了如下判断: <if test=" type == '1' & ...
- makefile文件写法解析
一.makefile文件示例 makefile文件并不难写,一个makefile模版如下所示,所有makefile文件在此基上稍微修改就可以了. # this is a makefile #这一行是注 ...
随机推荐
- python的参数传递是值传递还是引用传递?都不是!
[写在前面] 参考文章: https://www.cnblogs.com/spring-haru/p/9320493.html[偏理论,对值传递和引用传递作了总结] https://www.cnblo ...
- python使用Django框架开发简单项目
一. (1)使用idea生成一个python项目,安装Django框架: pip install django==1.8.2 (2)初始化项目: django-admin startproject x ...
- Sequence Model-week2编程题1-词向量的操作【余弦相似度 词类比 除偏词向量】
1. 词向量上的操作(Operations on word vectors) 因为词嵌入的训练是非常耗资源的,所以ML从业者通常 都是 选择加载训练好 的 词嵌入(Embedding)数据集.(不用自 ...
- Java:并发笔记-06
Java:并发笔记-06 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 5. 共享模型之无锁 本章内容 CAS 与 volatile 原子整数 原子引用 原子 ...
- the Agiles Scrum Meeting 12
会议时间:2020.4.20 21:00 1.每个人的工作 今天已完成的工作 个人结对项目增量开发组: 自动评测系统基本开发完成,实现个人项目自动评测功能 issues: 个人结对功能开发组:开发自动 ...
- 『学了就忘』Linux基础 — 4、VMware安装
目录 1.VMware介绍 2.VMware主要特点 3.VMware建议配置 4.VMware安装 1.VMware介绍 VMware是一个虚拟PC的软件,可以在现有的操作系统上虚拟出一个新的硬件环 ...
- IRCUT作用
IRCUT组成原理 IRCUT由两层滤光片组成,一片红外截止或吸收滤光片和一片全透光谱滤光片 白天是红外截止滤光片工作,晚上是全透滤光片工作,白天摄像头可以接收到人眼无法识别的红外线,会导致图像与肉眼 ...
- 绘制PCB电路原理图的8种方法
1.选择集成电路,变压器,晶体管等组件,这些组件体积庞大,有许多引脚并在电路中起主要作用,然后从选定的参考引脚中抽取,以减少错误. 2.如果PCB上标有元件编号(如VD870,R330,C466等), ...
- STM32定时器学习---基本定时器
STM32F1系列的产品,除了互联网产品外,工作8个,3种定时器,其中一种就是基本定时器.那么STM32单片机的基本定时器如何操作以及编程呢? 下面我们就来详细的了解一下 STM32F1系列的产品,除 ...
- 攻防世界 web4.cookie
题有几种解法,我有点懒,懒的打开burp,所以可以直接在浏览器拿flag, 首先访问ip/cookie.php,提示:See the http response 接着F12查看响应头 给你cyberp ...