洛谷 P1759 通天之潜水
P1759 通天之潜水
题目背景
直达通天路·小A历险记第三篇
题目描述
在猴王的帮助下,小A终于走出了这篇荒山,却发现一条波涛汹涌的河拦在了自己的面前。河面上并没有船,但好在小A有n个潜水工具。由于他还要背重重的背包,所以他只能背m重的工具,又因为他的力气并不是无限的,河却很宽,所以他只能背有v阻力的工具。但是这条河下有非常重要的数据,所以他希望能够停留的时间最久。于是他找到了你,让你告诉他方案。
输入输出格式
输入格式:
三个数m,v,n如题目所说
接下来n行,每行三个数ai,bi,ci分别表示所含的重力,阻力,能够支撑的时间
输出格式:
第一行一个数,表示最长的时间
接下来一行,若干个数,表示所选的物品
输入输出样例
100 100 3
50 60 289
40 10 116
50 50 106
405
1 2
说明
1<=m,v<=200,n<=100
数据保证一定有方案。
若有多种方案,输出前面尽量小的方案。
60分代码:
#include<cstdio>
#include<iostream>
using namespace std;
#define N 1001
int n,m,q,ans[N];
int v[N],g[N],c[N];
int f[N][N];
int main(){
scanf("%d%d%d",&n,&m,&q);
for(int i=;i<=q;i++) scanf("%d%d%d",&v[i],&g[i],&c[i]);
for(int i=;i<=q;i++){
for(int j=v[i];j<=n;j++){
for(int k=g[i];k<=m;k++){
int tmp=f[j-v[i]][k-g[i]]+c[i];
if(j==n&&k==m){
if(tmp>f[j][k]) f[j][k]=tmp,ans[++ans[]]=i;
else if(tmp==f[j][k]&&(n>v[i]||m>g[i])) ans[++ans[]]=i;
}
else if(tmp>f[j][k]) f[j][k]=tmp;
}
}
}
printf("%d\n",f[n][m]);
for(int i=;i<=ans[];i++) printf("%d ",ans[i]);
return ;
}
题解:
”最长的时间“的dp转移
f[j][k]=Max(f[j][k],f[j-v[i]][k-g[i]]+c[i]);
f[j][k]表示在j重力k阻力的情况下的最长时间
难点在于输出所选的物品
这样,维护一个len,记录选了几个物品;
维护一个a[],记录当期所选物品的编号:每一次更新答案,把上一次的所选物品复制过来,再加上当前物品。
AC代码:
#include<cstdio>
#include<iostream>
using namespace std;
#define N 201
int n,m,q,ans[N];
int v[N],g[N],c[N];
struct node{
int w,len;
int a[];
} f[N][N];
int main(){
scanf("%d%d%d",&n,&m,&q);
for(int i=;i<=q;i++) scanf("%d%d%d",&v[i],&g[i],&c[i]);
for(int i=;i<=q;i++){
for(int j=n;j>=v[i];j--){
for(int k=m;k>=g[i];k--){
if(f[j][k].w<f[j-v[i]][k-g[i]].w+c[i]){
f[j][k].w=f[j-v[i]][k-g[i]].w+c[i];
for(int t=;t<=f[j][k].len;t++) f[j][k].a[t]=f[j-v[i]][k-g[i]].a[t];
f[j][k].len=f[j-v[i]][k-g[i]].len+;
f[j][k].a[f[j][k].len]=i;
}
}
}
}
printf("%d\n",f[n][m].w);
for(int i=;i<=f[n][m].len;i++) printf("%d ",f[n][m].a[i]);
return ;
}
洛谷 P1759 通天之潜水的更多相关文章
- 洛谷——P1759 通天之潜水
P1759 通天之潜水 题目背景 直达通天路·小A历险记第三篇 题目描述 在猴王的帮助下,小A终于走出了这篇荒山,却发现一条波涛汹涌的河拦在了自己的面前.河面上并没有船,但好在小A有n个潜水工具. ...
- 洛谷P1759 通天之潜水
题目背景 直达通天路·小A历险记第三篇 题目描述 在猴王的帮助下,小A终于走出了这篇荒山,却发现一条波涛汹涌的河拦在了自己的面前.河面上并没有船,但好在小A有n个潜水工具.由于他还要背重重的背包,所以 ...
- P1759 通天之潜水(双写法+解析)
算法解析 动态规划问题满足三大重要性质 最优子结构性质:如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理).最优子结构性质为动态规划算法解决问题提供了重 ...
- P1759 通天之潜水(不详细,勿看)(动态规划递推,组合背包,洛谷)
题目链接:点击进入 题目分析: 简单的组合背包模板题,但是递推的同时要刷新这种情况使用了哪些物品 ac代码: #include<bits/stdc++.h> using namespace ...
- luogu P1759 通天之潜水
题目背景 直达通天路·小A历险记第三篇 题目描述 在猴王的帮助下,小A终于走出了这篇荒山,却发现一条波涛汹涌的河拦在了自己的面前.河面上并没有船,但好在小A有n个潜水工具.由于他还要背重重的背包,所以 ...
- 洛谷P1757 通天之分组背包
题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品相互冲突,现在,他想知道最大 ...
- 洛谷——P1757 通天之分组背包
P1757 通天之分组背包 题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品 ...
- 洛谷 P1757 通天之分组背包
P1757 通天之分组背包 题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品 ...
- 洛谷 P1760 通天之汉诺塔
P1760 通天之汉诺塔 题目背景 直达通天路·小A历险记第四篇 题目描述 在你的帮助下,小A成功收集到了宝贵的数据,他终于来到了传说中连接通天路的通天山.但是这距离通天路仍然有一段距离,但是小A突然 ...
随机推荐
- element--ui使用tab切换时如何获取当前对象的id或者其他属性
1. 问题 当使用tab切换时,部分特殊场景需要获取当前元素的类名或者id. 2.解决思路,tab切换是绑定函数,函数会传递过去当前对象,通过当前对象获取对象属性 vue部分代码:本项目是在vue-c ...
- 启动web项目卡在Initializing Spring root WebApplicationContext不动
这几天在和同学一起做一个电教器材管理系统的Web项目,用SVN互通,在此记录下经常遇到的bug. Bug: 启动项目一直卡在Initializing Spring root WebApplicatio ...
- vue 选项卡
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script sr ...
- 秋招复习-C++( 一)
Linux/Unix编程部分 1.进程间通信方式:信号,信号量,消息队列,共享内存,套接字Socket 2.ipcs: Linux/Unix下的命令,可以用来查看当前系统中所使用的进程间通信方式的各种 ...
- Python:webshell 跳板机审计服务器
1.修改paramiko源码包实现 https://github.com/paramiko/paramiko/tree/1.10.1 下载源码包 unzip paramiko-1.10.1.zip p ...
- html页面加载初始化方法
js: 方法一: window.onload=function(){内容} 方法二(自己定义方法): function onload(){内容} onload(); jQuery: 方法一: $(do ...
- 87-Moving average of oscillator,移动平均振荡指标.(2015.7.4)
Moving average of oscillator 移动平均振荡指标 ~计算: OSMA = MACD-SIGNAL 注释:OSMA的值即为MACD中两个主要指标线的差值 ~思想: 该指标当作一 ...
- 带FIFO的UART数据接收
芯片手册 某个Cortex-M4芯片带有1个UART,支持Tx,Rx 的FIFO功能,而且可以通过寄存器配置FIFO的阈值,芯片的datasheet并不完善,没有说明RX的FIFO具体有几个级别,每隔 ...
- webstrom破解-webstrom2018.2.4破解方法(xjl456852原创)
方法一: 获取注册码: http://idea.lanyus.com/ 方法二: 使用破解补丁 放在安装目录的bin目录下,并且编辑bin目录下的文件 如果使用的32位的webstrom就编辑webs ...
- CentOS7 Firewall防火墙配置用法详解
centos 7中防火墙是一个非常的强大的功能了,但对于centos 7中在防火墙中进行了升级了,下面我们一起来详细的看看关于centos 7中防火墙使用方法. FirewallD 提供了支持网络 ...